如何将node_modules文件夹部署到生产服务器?

10

我在PHP(LAMP服务器)中创建了一个非常简单的网站(类似pastebin)。该站使用jquery和bootstrap。我之前使用的是,但我想改用npm

我的目录结构如下:

  • public
    • html
      • index.php
      • node_modules
        • jquery
          • dist
            • jquery.js
          • 还有数十个不必要的文件夹
        • bootstrap
          • ...

当我使用bower时,我会上传整个bower_components文件夹到FTP服务器。我的node_modules文件夹相当大,包含数百个文件,所以我不确定是否应该上传它?

我想我可以只上传package.json,并在上传后在Web服务器的命令行上运行npm install,但将node_modules文件夹暴露给公共用户是否会带来潜在的安全风险?

1个回答

12

如果你使用git,那么你的node_modules文件夹应该在.gitignore中。不,你不需要上传整个文件夹。你可以像这样运行npm install。对于bower也是如此,你不应该上传bower_components文件夹,而应该在服务器上运行命令。

至于问题的另一部分,你也不应该暴露node_modules。你需要使用一些任务管理器或捆绑工具(gulp、grunt、webpack)来创建文件的捆绑(或合并)版本(css和js)。一旦你有了这个文件,就可以将其公开。例如,你可以在索引中包含这个文件:<script src="dist/bundle.min.js"></script>


因此,node_modules 将被 npm install 填充。我将尝试使用 babel(仅此而已),这意味着在我的开发机器上,该文件夹大约有 14 MByte。这也将出现在生产机器上,对吗?这是必要的吗?如果我有许多独立的解决方案在这台机器上使用 babel,每个解决方案都会有那个大小的文件夹吗?这与 composer 和 vendor 目录相同吗?虽然它只用于转译 JS - 但 node_modules 中没有任何内容直接被客户端使用。 - robsch
@robsch 是啊,但你仍然需要先安装依赖项才能创建那个捆绑包。 - yBrodsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接