Я хочу использовать Webpack, чтобы создать один файл scripts.js
из всех необходимых файлов Javascript.
В моем 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 также хочет загрузить модуль jQuery в каталог «nodes_modules». Мой первый подход состоял в том, чтобы решить эту проблему, добавив 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);
}
}