Webpack не исключая модули узлов
Я использую webpack для структуры узла, которую я создаю (хотя я, вероятно, должен использовать gulp, по общему признанию). Когда я включаю модуль EJS, webpack включает его в скомпилированный источник, хотя я явно говорю ему исключить node_modules dir.
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; почему он игнорирует мое исключение?
4 ответов:
из вашего конфигурационного файла, похоже, вы только исключаете
node_modulesот разбора сbabel-loader,а не из комплекта поставки.для того, чтобы исключить
node_modulesи собственные библиотеки узлов из пакета, вам нужно:
- добавить
target: 'node'наwebpack.config.js. Это будет исключить модули собственного узла (путь, fs и др.) могут быть в комплекте.- использовать webpack-node-externals для того, чтобы исключить другие
node_modules.так что ваш результат конфигурационный файл должен выглядеть так:
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 ... };
Если вы столкнулись с этой проблемой при использовании TypeScript, вам может потребоваться добавить
skipLibCheck: trueв своем .
Это случилось со мной, потому что я указал свой собственный
resolve.extensionsно не удалось включить пустое расширение'':resolve: { extensions: ['.js', '.jsx'] },С webpack docs:
установка этого параметра переопределит значение по умолчанию, что означает, что webpack больше не будет пытаться разрешить модули с использованием расширений по умолчанию. Если вы хотите, модули которые были необходимы с их расширением (например, требуют('./ какой-то файл.ext')) чтобы правильно решить, вы должны включить пустая строка в массиве. Аналогично, если вы хотите, чтобы модули, которые были необходимы без расширений (например, require ('underscore')), были разрешены в файлы с ".АО" расширения, вы должны включить ".АО" в вашем массиве.
добавление пустого расширения разрешило ошибки:
resolve: { extensions: ['', '.js', '.jsx'] },
Comments