与 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 工作
在将 JavaScript 与 Webpack 捆绑时,require/import URL 开头的 @ 符号是啥意思?