Подтвердить что ты не робот

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; почему он игнорирует мое исключение?

4b9b3361

Ответ 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.