我有一个电子项目,该项目使用ceratin nodejs lib(@ grpc / proto-loader)。 生产版本无法正常工作,因为webpack用自己的函数替换 require.resolve(),该函数返回模块ID而不是路径。如何防止webpack这样做?
我试图将有问题的程序包添加到“外部程序”中,但这似乎不起作用。
我希望应用程序使用节点的require()函数。 我知道可以使用non_webpack_require,但是我不能修改软件包的代码,这是一个第三方库。那有更好的方法吗?
答案 0 :(得分:1)
我写了一篇文章来解决此问题:https://github.com/grpc/grpc-node/issues/969#issuecomment-633271735
更新您的webpack.config.js
以使用新的加载器(请先指定):
...
rules: [
{
test: /@grpc\/proto-loader/,
use: path.resolve('scripts/remove-proto-loader-protos.js'),
},
...
然后使用以下代码创建文件scripts/remove-proto-loader-protos.js
:
// https://github.com/grpc/grpc-node/issues/969
module.exports = function (source) {
if (source.includes(`Load Google's well-known proto files`)) {
return source.replace(/\/\/ Load Google's well-known proto files.*?\n}/gis, '')
} else {
return source
}
}
就是这样!原始加载代码将自动清除。无需单独的fork并手动对其进行更新。
这当然意味着,如果任何人都需要这些原始文件,则必须手动加载它们。此外,如果Google更新了他们的代码,则将来可能需要更新此黑客。我知道,这是黑客,但是您能做什么? ¯\_(ツ)_/¯