#node.js #typescript #webpack #node-modules #bundler
Вопрос:
Я знаю, что об этом уже спрашивали раньше, но я не могу получить никакого приемлемого ответа на работу.
Моя цель состоит в том, чтобы каждая из моих точек входа была объединена в одну [запись].js для переносимости. В идеале я хотел бы иметь [запись].js и [запись].[модули/поставщик].js, но не обязательно.
Что я пробовал:
- Используя
webpack-node-externals
с.allowlist
Приводит к тому, что глубокие модули не находят - Ручные внешние параметры
path: "commonjs path"
. Не изменяет результат const {} = require('path')
вместоimport {} from 'path'
. Также ничего не меняет- Конфигурации ниже, которые, как я полагаю, дают наиболее близкий результат, который заключается в том, что он не может найти встроенные модули.
tsconfig.json
{
"compilerOptions": {
"module": "commonjs",
"moduleResolution": "node",
"esModuleInterop": true,
"outDir": "launch",
"noImplicitAny": false,
"target": "es5",
"allowJs": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"allowSyntheticDefaultImports": true,
"sourceMap": true,
},
"exclude": [
"__tests__",
"dist",
"launch"
],
"include": [
"src/Auth",
"src/Gate",
"src/Patch",
"src/Account",
"src/Proxy",
]
}
webpack.config.js
const path = require('path');
module.exports = {
target: 'node',
mode: 'production',
entry: {
'gate': './src/Gate/index.ts',
'patch': './src/Patch/index.ts',
'auth': './src/Auth/index.ts',
'account': './src/Account/index.ts',
'proxy': './src/Proxy/index.ts',
},
stats: {warnings:false},
module: {
rules: [
{
test: /.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
]
},
resolve: {
extensions: ['.tsx', '.ts', '.js']
},
optimization: {
usedExports: true,
chunkIds: 'natural',
splitChunks: {
// default splitChunks config
chunks: 'async',
minSize: 20000,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
enforceSizeThreshold: 50000,
cacheGroups: {
defaultVendors: {
test: /[\/]node_modules[\/]/,
priority: -10,
reuseExistingChunk: true,
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true,
},
},
}
}
};
Комментарии:
1. Обычно при объединении для Node env мы вообще не должны определять блоки поставщиков, так как при запуске node_modules всегда должны быть доступны для использования.
Ответ №1:
Я обнаружил проблему, это был пакет cli
, который имеет свой собственный тип разрешения управляемого модуля, который разрывается с webpack. Я заменил его на commander
.