Cob*_*urn 3 javascript require webpack
我有一个可与 NodeJS 和浏览器互操作的库,两者都通过 Webpack 运行以生成最终包。我遇到的问题是 Webpack 会将所有require()语句重写为__webpack_require__()并尝试捆绑库,这对fs和 之类的东西不起作用worker_threads。我如何使它忽略某些require()S和相关机制(require.resolve(),import给出了具体的输入字符串,等等)?
我已经读到我可以使用 ,webpack.IgnorePlugin但我不想让用户必须在他们的构建中为我的库添加特殊规则。我也无法让这个自己工作,它仍然重写了require()s。我也读过我能做的,eval('require("fs")')但这看起来很笨拙,但如果这真的是最好的方法,我愿意这样做。
例子:
//example.js
if(typeof window !== "undefined") {
//Browser
var myWorker = new Worker();
}
else {
//NodeJS
var Worker = require("worker_threads"); //I want Webpack to keep this line as-is
var myWorker = new Worker();
}
Run Code Online (Sandbox Code Playgroud)
要require在与 Webpack 捆绑后在代码中保持调用原样,只需替换require为__non_webpack_require__. 所以你的例子看起来像这样:
if (typeof window !== "undefined") {
var myWorker = new Worker();
}
else {
var Worker = __non_webpack_require__("worker_threads");
var myWorker = new Worker();
}
Run Code Online (Sandbox Code Playgroud)
这是 Webpack 的一个隐藏特性(可能是因为它不经常使用)在这里发现它会忽略require调用,因此可以在应用程序运行时而不是在捆绑时评估它们。
请注意,这不应用于针对 Web 浏览器的应用程序,因为它会导致resolve被使用,而 Web 浏览器不知道是什么resolve。仅在针对 Node.js 的代码中使用它。
| 归档时间: |
|
| 查看次数: |
1414 次 |
| 最近记录: |