Javascript 从webpack捆绑包中排除模块
我想要像RequireJSJavascript 从webpack捆绑包中排除模块,javascript,webpack,Javascript,Webpack,我想要像RequireJSempty: 我的用例是在开发中包括jquery migrate,但我希望在为生产构建时排除这一点 使用IgnorePlugin只会使其不包括在内,当需要在代码中添加它时,它会抛出一个错误(未捕获错误:找不到模块“jquery migrate”) 我希望它只返回undefined,或者类似的东西(比如RequireJS中的empty:)。我不想触碰代码中的导入,只想将其配置为返回未定义的 编辑:如果我将替换指向一个空文件,则使用NormalModuleReplaceme
empty:
我的用例是在开发中包括jquery migrate
,但我希望在为生产构建时排除这一点
使用IgnorePlugin
只会使其不包括在内,当需要在代码中添加它时,它会抛出一个错误(未捕获错误:找不到模块“jquery migrate”
)
我希望它只返回undefined,或者类似的东西(比如RequireJS中的empty:
)。我不想触碰代码中的导入,只想将其配置为返回未定义的
编辑:如果我将替换指向一个空文件,则使用NormalModuleReplacementPlugin
可以工作。但是,仅为此保留一个空文件似乎是不必要的。您可以尝试在webpack.config中创建resolve.alias:
resolve: {
alias: {
"jquery-migrate": process.env.NODE_ENV === 'production' ? "empty-module": "jquery-migrate"
}
}
将Webpack的DefinePlugin
与常规生产插件(重复数据消除和Uglify)结合使用
然后,您可以在代码中编写:
if(DEBUG) {
var test = require('test');
alert(test);
}
当它在产品中构建时,DEBUG
将被替换为一个literalif(false){…}
,它将被uglify插件完全删除,因此test
只在调试构建中需要
以下是Grunt webpack
的示例Grunt任务配置,它具有任务的development
和production
目标:
development: {
devtool: "sourcemap",
output: {
pathinfo: true,
},
debug: true,
production: false,
plugins: [
new webpack.DefinePlugin({
DEBUG: true,
PRODUCTION: false
})
]
},
production: {
plugins: [
new webpack.DefinePlugin({
DEBUG: false,
PRODUCTION: true
}),
new webpack.optimize.DedupePlugin(),
new webpack.optimize.UglifyJsPlugin({
output: {
comments: false,
}
})
]
},
我使用空加载程序来清空模块。
noop加载器可以用于配置中不那么笨拙的if-else
尝试:
这仍然迫使我有一个空模块。虽然比NormalModuleReplacementPlugin
更干净:)@Simennpm i-D empty module
我实际上更喜欢用调试语句来装饰源代码,而不是在构建工具脚本中。当您回到代码中,以及其他人试图理解jQuery迁移的来源时,这会让您自己更容易理解。True。不过,这对AMD来说并不完全有效,至少在最初的define
调用中列出了这一点。使用别名与empty:
完全一样,只是我必须自己创建empty
模块。这似乎对我很有效,我认为最能回答OP的问题。没有代码更改,我的代码顶部仍然有一个从“排除模块”导入foo的import,没有有趣的if(DEV)
wrapper。想象一下,require('excluded-module')
也可以工作。请注意,其他新手,这些加载程序不包括在网页包中:npm安装--保存dev null加载程序和&npm安装--保存dev noop加载程序
有没有办法不使用模块?我刚刚尝试了loader:()=>{}
但仍然得到一个无法解决的错误。
rules: [{
test: /jquery-migrate/,
use: IS_DEV ? 'null-loader' : 'noop-loader'
}]