首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jquery-迁移与webpack?

如何使用jquery-迁移与webpack?
EN

Stack Overflow用户
提问于 2016-06-10 13:20:15
回答 3查看 5K关注 0票数 5

npm install jquery-migrate之后,我可以只在主scripts.js文件中使用require('jquery-migrate');。这样做很好:

代码语言:javascript
复制
console.log(jQuery.migrateVersion); // JQMIGRATE: Migrate is installed with logging active, version 3.0.0

现在,我想将其设置为在生产版本中不存在jquery。

webpack.config.js:

代码语言:javascript
复制
var dev = process.env.NODE_ENV !== 'prod';
var webpack = require('webpack');
var dist = '/dist/js';

module.exports = {
    context: __dirname,
    entry: __dirname + '/src/js/scripts.js',
    output: {
        path: __dirname + dist,
        filename: 'scripts.js'
    },
    resolve: {
        alias: {
            'jquery': 'jquery/src/jquery',
            'jquery-migrate': 'jquery-migrate'
        }
    },
    plugins: dev ? [
        new webpack.ProvidePlugin({
            '$': 'jquery',
            'jQuery': 'jquery',
            'jquery-migrate': 'jquery-migrate'
        })
    ] : [
        new webpack.optimize.DedupePlugin(),
        new webpack.optimize.OccurenceOrderPlugin(),
        new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
        new webpack.ProvidePlugin({
            '$': 'jquery',
            'jQuery': 'jquery'
        })
    ]
};

这是行不通的:

代码语言:javascript
复制
console.log(jQuery.migrateVersion); // Undefined

如何从webpack.config加载jquery迁移?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-11 10:39:46

我们在工作中所做的就是将require放在生产检查中。

代码语言:javascript
复制
if (__DEV__) {
  require('jquery-migrate');
}

您也可以使用这个方法,如果检查的话:if (process.env.NODE_ENV !== 'production')

这样,webpack在为生产捆绑时就会看到它的死代码,并且不会解析require,而只会包含这个模块。

要使这些检查工作,您应该使用提供插件来定义它们。

代码语言:javascript
复制
new webpack.ProvidePlugin({
    'process.env': {
        NODE_ENV: JSON.stringify(dev) // Or some other check
    },
    __DEV__: JSON.stringify(true) // or something
})

ProvidePluginalias都不需要jquery-migrate,顺便说一句:)

票数 2
EN

Stack Overflow用户

发布于 2017-07-06 17:28:28

您可以通过__DEV__在整个应用程序中创建一个全局webpack.config.js变量。只需将以下内容添加到plugins数组中:

代码语言:javascript
复制
plugins: [
    new webpack.DefinePlugin({
        __DEV__: dev
    }),
    // other plugins
]

Webpack - DefinePlugin

安装jquery-migrate时:

代码语言:javascript
复制
npm install jquery-migrate --save-dev

然后,在应用程序的入口点(也许是app.js)添加:

代码语言:javascript
复制
if (__DEV__) {
    require("jquery-migrate");
}

此外,一些jquery插件,比如jqueryCaret的最新版本(撰写本文时),引用window.jQuery而不仅仅是jQuery,因此可能需要将'window.jQuery': 'jquery'行添加到webpack.ProvidePlugin构造函数中:

代码语言:javascript
复制
plugins: [
    new webpack.ProvidePlugin({
        jQuery: 'jquery',
        '$': 'jquery',
        'window.jQuery': 'jquery',
    }),
    // other plugins
]
票数 4
EN

Stack Overflow用户

发布于 2016-06-10 15:38:31

如果您要将其内联到index.html文件中。您可以使用某种环境变量来设置是否希望使用html-webpack-plugin显示脚本。这个插件支持你可以使用的动态模板。

文档写得很好,我建议你看一看!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37749376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档