SplitChunksPlugin не создает чанк для зависимостей, общих для точек входа
Я пытаюсь использовать разбиение кода, чтобы я мог тестировать производственный код без дублирования модулей. Я хотел бы, чтобы webpack распознал, что мои файлы *.test.ts используют те же модули, что и сам исходный код, и вывел пакет, содержащий эти общие зависимости. Однако webpack выводит только пакеты, соответствующие точкам входа, и не извлекает общий код в свой собственный пакет.
Я использую базовую конфигурацию, представленную в официальной документации для моего варианта использования ( https://webpack.js.org/guides/code-splitting), но не повезло. Единственное существенное отличие, которое я вижу, заключается в том, что я использую загрузчики для переноса своего кода, а официальные примеры - нет.
Структура папок
|- /MyProject
|- webpack.config.js
|- /node_modules
|- /build
|- /src
|- webServer.ts
|- myLib.ts
|- webServer.test.ts
|- myLib.test.ts
webServer.ts
import './myLib';
// do webserver stuff
myLib.test.ts
import './myLib';
import mocha, chai, etc etc
// unit tests for myLib
webServer.test.ts
import './myLib.test';
// this file is just a convenient entry point for grouping unit tests
webpack.config.js
var nodeExternals = require('webpack-node-externals');
const serverConfig = {
mode: 'development',
target: 'node',
externals: [nodeExternals()],
entry: {
webServer: './src/webServer.ts',
'webServer.test': './src/webServer.test.ts'
},
output: {
path: __dirname + '/build',
filename: '[name].js'
},
resolve: {
extensions: ['.ts']
},
optimization: {
splitChunks: {
chunks: 'all',
}
},
module: {
rules: [{
test: /\.ts/,
include: [__dirname],
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' },
{ loader: 'ts-loader' }
]
}]
}
module.exports = [serverConfig];
Я ожидаю, что webpack выпустит 3 файла: webServer.js
, webServer.test.js
и третий, который связывает myLib
, Тем не менее, я получаю только 2 файла: webServer.js
а также webServer.test.js
1 ответ
Следующие изменения в моем конфиге исправили проблему для меня.
var nodeExternals = require('webpack-node-externals');
const serverConfig = {
mode: 'development',
target: 'node',
externals: [nodeExternals()],
entry: {
webServer: './src/webServer.ts',
'webServer.test': './src/webServer.test.ts'
},
output: {
path: __dirname + '/build',
filename: '[name].js'
},
resolve: {
extensions: ['.ts']
},
optimization: {
- splitChunks: {
- chunks: 'all',
- }
+ splitChunks: {
+ cacheGroups: {
+ common: {
+ chunks: 'all',
+ enforce: true,
+ name: 'common'
+ }
+ }
+ }
},
module: {
rules: [{
test: /\.ts/,
include: [__dirname],
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' },
{ loader: 'ts-loader' }
]
}]
}
module.exports = [serverConfig];