Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从webpack捆绑包中排除模块_Javascript_Webpack - Fatal编程技术网

Javascript 从webpack捆绑包中排除模块

Javascript 从webpack捆绑包中排除模块,javascript,webpack,Javascript,Webpack,我想要像RequireJSempty: 我的用例是在开发中包括jquery migrate,但我希望在为生产构建时排除这一点 使用IgnorePlugin只会使其不包括在内,当需要在代码中添加它时,它会抛出一个错误(未捕获错误:找不到模块“jquery migrate”) 我希望它只返回undefined,或者类似的东西(比如RequireJS中的empty:)。我不想触碰代码中的导入,只想将其配置为返回未定义的 编辑:如果我将替换指向一个空文件,则使用NormalModuleReplaceme

我想要像RequireJS
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
将被替换为一个literal
if(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
更干净:)@Simen
npm 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'
}]