Dav*_*ski 7 node.js express webpack
在使用Webpack构建后端节点服务器时,我收到一些令人困惑的警告.我想使用Webpack构建我的后端主要有两个原因:
以下是我收到的警告:
WARNING in ./~/ws/lib/BufferUtil.js
Module not found: Error: Can't resolve 'bufferutil' in .../node_modules/ws/lib
@ ./~/ws/lib/BufferUtil.js 35:21-42
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./src/main.js
WARNING in ./~/ws/lib/Validation.js
Module not found: Error: Can't resolve 'utf-8-validate' in .../node_modules/ws/lib
@ ./~/ws/lib/Validation.js 10:22-47
@ ./~/ws/lib/Receiver.js
@ ./~/ws/index.js
@ ./src/main.js
WARNING in ./~/express/lib/view.js
80:29-41 Critical dependency: the request of a dependency is an expression
Run Code Online (Sandbox Code Playgroud)
对于Critical dependency警告,我找到了一个很好的例子来解释问题和一些关于如何使用ContextReplacementPlugin的文档,尽管我仍然不清楚如何将它应用于这种情况.看起来警告是由第80行引起的node_modules/express/lib/view.js:
opts.engines[this.ext] = require(mod).__express
Run Code Online (Sandbox Code Playgroud)
我很清楚,在构建时无法解决依赖关系,那么如何使用ContextReplacementPlugin来修复此依赖关系呢?
至于包中的Module not found警告,ws我不清楚发生了什么.看起来这些依赖项存在于我的全局中 node_modules,也许它们并没有被Webpack所吸引.我已经尝试将它们添加到我的项目的devDependencies中,但之后我只是Critical dependency为它们收到警告.
我的应用程序在构建之后仍然运行,所以我想我可以在技术上忽略警告,但我认为这些是广泛使用的Node包,而Webpack是一种流行的构建工具,因此必须有一个合理的解决方案.
以下是我的依赖package.json:
"devDependencies": {
"@types/cassandra-driver": "^0.8.10",
"@types/express": "^4.0.35",
"@types/uuid": "^2.0.29",
"@types/ws": "0.0.40",
"nodemon": "^1.11.0",
"typescript": "^2.3.1",
"webpack": "^2.5.1"
},
"dependencies": {
"cassandra-driver": "^3.2.1",
"express": "^4.15.2",
"uuid": "^3.0.1",
"ws": "^2.3.1"
}
Run Code Online (Sandbox Code Playgroud)
这是我的webpack.config.js:
const path = require('path');
module.exports = {
entry: './src/main.js',
output: {
path: path.join(__dirname, 'dist'),
filename: 'main.js'
},
target: 'node',
node: {
__dirname: false,
__filename: false
}
};
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我喜欢保持最小化.谢谢阅读.
简短的回答
webpack 可以与 Node 一起使用,但它无法提取后续的 require() 语句。必须进行修改以忽略 require() 才能使其正常工作。
长答案
实际上可以将一些文件拉入主文件并在某些情况下运行它。
一个例子是,如果所需的所有模块都是用打字稿编写的,并且这些模块是以打字稿插件可以解析模块的方式编写的。
另一个例子是,如果您使用 es6 babel 插件并使用 es6 样式导入。
即使在上述情况下,错误也可能选择不提取某些文件
最终答案
尝试执行长答案实际上并不重要,因为模块在启动时存储在内存中,然后从缓存中引用。请参阅下面的文章了解更多信息。
http://fredkschot.com/post/2014/06/require-and-the-module-system/
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |