2015-10-07 21 views
52

Tôi đang sử dụng webpack cho một khung 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 các mô-đun EJS, webpack bao gồm nó trong nguồn biên dịch, mặc dù tôi rõ ràng nói với nó để loại trừ các node_modules dir.Webpack không loại trừ 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"] }' 
      } 
     ] 
    } 
}; 

Như bạn có thể thấy, tôi có một thử nghiệm cho các tệp JS và tôi cho phép loại trừ các nút node_modules; tại sao nó bỏ qua việc loại trừ của tôi?

Trả lời

109

Từ tập tin cấu hình của bạn, nó có vẻ như bạn chỉ trừ node_modules từ đang được phân tích với babel-loader, nhưng không không bị kèm.

Để loại trừ node_modules và mẹ đẻ thư viện nút từ bundling, bạn cần phải:

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

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

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

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

+0

Tôi đang cố hiểu những gì 'exclude:/node_modules /' thực hiện. Bạn có thể xây dựng? Điều gì có thể xảy ra nếu chúng ta bỏ nó ra? –

+0

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

7

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

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

Điều đó không có tác dụng. – ndugger

+0

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

+1

không hoạt động đối với webpack 3.5.5 – vijay

-1

này đã xảy ra với tôi bởi vì tôi đã quy định riêng của tôi resolve.extensions nhưng thất bại trong việc có đuôi tên miền trống '':

resolve: { 
    extensions: ['.js', '.jsx'] 
}, 

Từ webpack docs:

Đặt tùy chọn này sẽ ghi đè mặc định, có nghĩa là w ebpack sẽ không còn cố gắng giải quyết các mô-đun bằng cách sử dụng các phần mở rộng mặc định. Nếu bạn muốn các mô-đun được yêu cầu với phần mở rộng của chúng (ví dụ: yêu cầu ('./ somefile.ext')) để được giải quyết đúng cách, bạn phải bao gồm một chuỗi rỗng trong mảng của bạn. Tương tự, nếu bạn muốn các mô-đun được yêu cầu không có tiện ích (ví dụ: yêu cầu ('gạch dưới')) được giải quyết cho các tệp có phần mở rộng ".js", bạn phải bao gồm ".js" trong mảng của mình.

Thêm phần mở rộng sản phẩm nào giải quyết các lỗi:

resolve: { 
    extensions: ['', '.js', '.jsx'] 
}, 
+5

Không hoạt động trong webpack 2.2: 'Đối tượng cấu hình không hợp lệ. Webpack đã được khởi tạo bằng cách sử dụng một đối tượng cấu hình không khớp với lược đồ API. - configuration.resolve.extensions [0] không được để trống.' – alwe

5

Nếu bạn chạy vào vấn đề này khi sử dụng nguyên cảo, bạn có thể cần thêm skipLibCheck: true trong tập tin tsconfig.json của bạn.

Các vấn đề liên quan