我正在编写一个导出类似函数的库:
function getFreshModule(absolutePath) {
if (someCond) {
delete require.cache[absolutePath]
}
return require(absolutePath)
}
使用webpack与libraryTarget: 'commonjs'
和target: 'node'
一起编译此(babel)。
对于我的生活,我无法弄清楚如何让webpack忽略这一点。
我不相信externals
对此是正确的,我还检查了ContextReplacementPlugin,以及摆弄这些选项(来自文档的片段)。
{
module: {
// Disable handling of requires with a single expression
exprContextRegExp: /$^/,
exprContextCritical: false
}
}
然而,这似乎并没有像它所说的那样 - 因为我的require语句仍然被__webpack_require_
函数取代。我也试过了module.noParse
,但这并不起作用,因为它不会通过babel转换。
库的其余部分是正常的,我只是希望它专门忽略require
的这种用法。
答案 0 :(得分:1)
我放弃了试图弄清楚如何做到这一点。 所以我推出了一个新的npm模块'external-require',简单地说就是:
module.exports = (x) => { return require(x)}
在webpack配置中使用'externals'支持,除此之外,我现在可以做我想做的事。
有一天,我会找到正确的方法。
如果您希望我扩展它支持更多需要的东西,请告诉我,例如删除require.cache []
答案 1 :(得分:0)
派对迟到了,但我遇到了类似的问题并且与Webpack争吵了一段时间没有用。但是,如果您可以使require
成为命名空间的一部分,那么您可以执行app.require()
之类的操作,Webpack将忽略它。幸运的是,我需要Window
全球可用。