与 webpack 捆绑时如何使 node.js 在没有 node_modules 的情况下工作?

Posted

技术标签:

【中文标题】与 webpack 捆绑时如何使 node.js 在没有 node_modules 的情况下工作?【英文标题】:How to make node.js work without node_modules when bundled with webpack? 【发布时间】:2019-01-26 05:44:55 【问题描述】:

我想部署一个应用程序,而不必捆绑文件夹中的所有 node_modules。

所以不要部署这个文件夹:

app.js node_modules(大文件夹)

有类似的东西:

app.js binary_dependencies

binary_dependencies 中应该只包含不能包含在app.js 文件中的二进制文件。

原因是yarn install会在docker中创建一个很大的层(500MB),上传很慢。我想缩小那个尺寸。

【问题讨论】:

你可以忽略node_modules并在服务器上运行npm install来下载这些依赖项。 那么捆绑的js文件如何访问捆绑的js文件中没有的二进制node_modules呢? 【参考方案1】:

使用 package.json 文件上传代码,然后 cd 到文件夹并运行 npm install 请注意您正在安装的版本,假设您有以下内容:

"dependencies": 
    "bluebird": "^3.5.1",
    "body-parser": "^1.18.3"
  

改成:

"dependencies": 
    "bluebird": "3.5.1",
    "body-parser": "1.18.3"
  

【讨论】:

谢谢,但您的解决方案仍有 node_modules 文件夹。我在问如何将 node_modules 捆绑在 webpack 的 bundles 输出文件中,并且只保留无法在 js 代码中捆绑的二进制模块。【参考方案2】:

就我而言,我没有任何“binary_dependencies”——所有提供的模块都捆绑在“app.js”中。然而,起初我不得不禁用webpack-node-externals,因为它故意从我捆绑的“app.js”中排除了一些模块。禁用模块后,我的 docker 容器上必须只有“Node”和 app.js”。通过运行“node app.js”,我能够启动我的“express.js”服务器,而无需提供“node_modules”因为它们已经捆绑在我的“app.js”中了。

【讨论】:

以上是关于与 webpack 捆绑时如何使 node.js 在没有 node_modules 的情况下工作?的主要内容,如果未能解决你的问题,请参考以下文章

与 Webpack 捆绑时,无法使 Tether 为 Bootstrap 4 工作

最新发布!webpack 4.0.0-alpha.0 特性

Node js - http2 的捆绑器

在将 JavaScript 与 Webpack 捆绑时,require/import URL 开头的 @ 符号是啥意思?

如何选择 node_modules dist 风格与 webpack 捆绑

Webpack 无法解析 Node.js 模块