Webpack không loại trừ node_modules


83

Tôi đang sử dụng webpack cho một khung công tác Node mà tôi đang xây dựng (mặc dù tôi có lẽ nên sử dụng gulp, phải thừa nhận). Khi tôi bao gồm mô-đun EJS, webpack sẽ bao gồm nó trong nguồn đã biên dịch, mặc dù tôi đã yêu cầu nó loại trừ dir node_modules một cách rõ ràng.

module.exports = {
    context: __dirname,
    target: 'node',
    // ...
    output: {
        libraryTarget: 'commonjs'
        // ...
    },
    module: {
        loaders: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader?{ "stage": 0, "optional": ["runtime"] }'
            }
        ]
    }
};

Như bạn thấy, tôi có một bài kiểm tra cho các tệp JS và tôi yêu cầu nó loại trừ node_modules; tại sao nó lại bỏ qua loại trừ của tôi?

Câu trả lời:


180

Từ tệp cấu hình của bạn, có vẻ như bạn chỉ loại trừ node_moduleskhỏi việc được phân tích cú pháp babel-loader, nhưng không bị nhóm.

Để loại trừ node_modulesvà các thư viện nút gốc khỏi nhóm, bạn cần:

  1. Thêm target: 'node'vào của bạn webpack.config.js. Điều này sẽ loại trừ các mô-đun nút gốc (đường dẫn, fs, v.v.) khỏi được đóng gói.
  2. Sử dụng webpack-node-externals để loại trừ cái khác node_modules.

Vì vậy, tệp cấu hình kết quả của bạn sẽ giống như sau:

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 
    ...
};

7
Có cái gì đó tương tự trên trình duyệt không? (mục tiêu ví dụ: 'duyệt')
Andrea.cabral

Tôi đang cố gắng hiểu những gì exclude: /node_modules/làm. Bạn có thể giải thích? Điều gì có thể xảy ra nếu chúng ta bỏ nó đi?
Šime Vidas

Đó là một regex. nếu bạn để nó ra, node_modules sẽ được bao gồm
meredrica

Câu trả lời và khả năng tuyệt vời.
Geek Stocks

2
@ ŠimeVidas nó sẽ loại trừ node_modulesdir từ có babel-loaderchạy trên nó, nhưng nó sẽ không loại trừ nó ra khỏi bó
mlg87

16

Nếu bạn gặp sự cố này khi sử dụng TypeScript, bạn có thể cần thêm tệp skipLibCheck: truecủa mình tsconfig.json.


7

Hãy thử sử dụng đường dẫn tuyệt đối:

exclude:path.resolve(__dirname, "node_modules")

bạn có thể cho chúng tôi biết dự án được cấu trúc như thế nào không? Cấu trúc tệp
Alan

-1

hãy thử giải pháp dưới đây:

exclude:path.resolve(__dirname, "node_modules")

4
Chào mừng bạn đến với StackOverflow. Sẽ tốt hơn nếu bạn cung cấp giá trị bổ sung trên đầu các câu trả lời khác. Trong trường hợp này, câu trả lời của bạn không cung cấp giá trị bổ sung, vì một người dùng khác (Alan) đã đăng giải pháp đó 5 năm trước. Bạn nên bình chọn nó khi bạn có đủ danh tiếng
Oleg Valter

-2

Điều này đã làm việc cho tôi:

loại trừ: [/ bower_components /, / node_modules /]

module.loaders

Một loạt các bộ tải được áp dụng tự động.

Mỗi mục có thể có các thuộc tính sau:

kiểm tra: Một điều kiện phải được đáp ứng

loại trừ: Một điều kiện không được đáp ứng

bao gồm: Một điều kiện phải được đáp ứng

trình tải: Một chuỗi "!" bộ tải riêng biệt

trình tải: Một mảng trình tải dưới dạng chuỗi

Điều kiện có thể là RegExp, bắt đầu đường dẫn tuyệt đối hoặc một mảng của một trong những điều kiện này được kết hợp với "và".

Xem http://webpack.github.io/docs/configuration.html#module-loaders

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.