пакет ts webpack для узла не может найти путь к модулю

#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 .