Webpack не исключает node_modules
Я использую webpack для рамки Node, которую я создаю (хотя, вероятно, я должен использовать gulp). Когда я включаю модуль EJS, webpack включает его в скомпилированный источник, хотя я явно говорю ему, чтобы исключить директорию node_modules.
module.exports = {
context: __dirname,
target: 'node',
// ...
output: {
libraryTarget: 'commonjs'
// ...
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader?{ "stage": 0, "optional": ["runtime"] }'
}
]
}
};
Как вы можете видеть, у меня есть тест на JS файлы, и я говорю ему исключить node_modules; почему он игнорирует мое исключение?
Ответы
Ответ 1
Из вашего файла конфигурации кажется, что вы исключаете node_modules
из анализа с babel-loader
, , но не от вложения.
Чтобы исключить из комплекта библиотек node_modules
и родных node, вам необходимо:
Итак, ваш файл конфигурации результата должен выглядеть так:
var nodeExternals = require('webpack-node-externals');
...
module.exports = {
...
target: 'node', // in order to ignore built-in modules like path, fs, etc.
externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
...
};
Ответ 2
Если вы столкнулись с этой проблемой при использовании TypeScript, вам может потребоваться добавить skipLibCheck: true
в ваш файл tsconfig.json
.
Ответ 3
Попробуйте использовать абсолютный путь:
exclude:path.resolve(__dirname, "node_modules")
Ответ 4
WebPack 1.x:
Это происходило со мной, потому что я указал свой собственный resolve.extensions
, но не смог включить пустое расширение ''
:
resolve: {
extensions: ['.js', '.jsx']
},
Из (больше не доступно!) документов веб-пакета:
Установка этого параметра переопределит значение по умолчанию, означающее, что webpack больше не будет пытаться разрешать модули с использованием расширений по умолчанию. Если вы хотите, чтобы модули, которые требовались с их расширением (например, require ('./somefile.ext')), были правильно разрешены, вы должны включить пустую строку в ваш массив. Аналогично, если вы хотите, чтобы модули, которые требовались без расширений (например, require ('underscore')), были преобразованы в файлы с расширениями '.js', вы должны включить в свой массив ".js".
Добавление пустого расширения устранило ошибки:
resolve: {
extensions: ['', '.js', '.jsx']
},
Ответ 5
Это сработало для меня:
исключить: [/bower_components/,/node_modules/]
module.loaders
Массив автоматически применяемых загрузчиков.
Каждый элемент может иметь следующие свойства:
тест: условие, которое должно быть выполнено
исключить: условие, которое не должно выполняться
включают в себя: условие, которое должно быть выполнено
загрузчик: строка "!" раздельные погрузчики
loaders: массив загрузчиков в виде строки
Условием может быть RegExp, начало абсолютного пути или массив одного из них в сочетании с "и".
См. Http://webpack.github.io/docs/configuration.html#module-loaders.