jquery-plugins - Webpack 需要一个 jQuery 插件

标签 jquery-plugins webpack webpack-2

我想使用 Webpack 从所有需要的 Javascript 文件中创建一个 scripts.js 文件。

在我的 main.js 中,我需要三个模块:

require('jquery');
require('readmore');
require('foundation');

我的 webpack.config.js 是这样的:

var path = require('path');

module.exports = {
    entry: ["./js/main.js"],
    output: {
        path: path.resolve(__dirname, 'build'),
        filename: "scripts.js"
    },
    resolve: {
        modulesDirectories: ["bower_components", "node_modules"],
        alias: {
            jquery: '../bower_components/jquery/dist/jquery.js',
            readmore: '../node_modules/readmore-js/readmore.js',
            foundation: '../bower_components/foundation-sites/dist/js/foundation.js'
        }
    }
}

我的问题:readmore-js 是一个 jQuery 插件,它本身需要 jQuery。 运行 Webpack 后出现此错误:

ERROR in ./~/readmore-js/readmore.js
Module not found: Error: Can't resolve 'jquery' in '/Users/myName/www/myProject/node_modules/readmore-js'
 @ ./~/readmore-js/readmore.js 17:4-31
 @ ./js/main.js
 @ multi main

根据我的理解,问题是 readmore 还想在目录“nodes_modules”中加载模块 jQuery。我的第一个方法是通过将 moduleDirectories 添加到配置文件来解决这个问题,但它仍然不起作用。 即使在这种情况下,插件也不应再次加载 jQuery。

你知道我如何全局加载 jQuery,然后自己“告诉”所有需要 jQuery 的模块“看,它就在那里!”

可能会有帮助,以下是从插件的 readmore.js 复制出来的:

(function(factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD
    define(['jquery'], factory);
  } else if (typeof exports === 'object') {
    // CommonJS
    module.exports = factory(require('jquery'));
  } else {
    // Browser globals
    factory(jQuery);
  }
}

最佳答案

您可以使用 webpack.ProvidePlugin为此:

main.js 中删除需要 jquery:

require('readmore');
require('foundation');

webpack.config.js 中配置 webpack.ProvidePlugin:

var path = require('path');

module.exports = {
    entry: ["./js/main.js"],
    output: {
        path: path.resolve(__dirname, 'build'),
        filename: "scripts.js"
    },
    resolve: {
        modulesDirectories: ["bower_components", "node_modules"],
        alias: {
            readmore: '../node_modules/readmore-js/readmore.js',
            foundation: '../bower_components/foundation-sites/dist/js/foundation.js'
        }
    },
    plugins: [
      new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery'
      }),
    ]
}

关于jquery-plugins - Webpack 需要一个 jQuery 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42699311/

相关文章:

javascript - webpack - 引用错误 : document is not defined

javascript - Webpack Extract-Text-Plugin localIdentName 在 DOM 中不起作用

angular - Angular 2 和 webpack 2 的错误堆栈跟踪

javascript - jQuery 插件在选项内设置选项

javascript - Vue-cli 版本 3 BETA webpack 配置

javascript - 仅使用 vue-cli3 配置 webpack 以用于生产

javascript - htmlWebPack 插件 publicPath 没有按预期工作

jquery - 将图像插入标题 HTML 属性

javascript - 从 data-* 属性获取 jquery 插件选项?

javascript - jQuery 数据表 : Uncaught TypeError: Cannot read property 'length' of undefined