Пакет Webpack, но не разрешает машинописный текст из пакета node_modules - PullRequest
0 голосов
/ 03 марта 2020

Вопрос, ребята, я пробовал разные способы решения этой проблемы.

У нас есть две папки во временном порядке моно-репо (без рабочей области пряжи). Один называется Mgt-Shared один называется Сервер . Мы ссылаемся на общий доступ с серверов package.json на "mgt-shared": "file:../mgt-shared", и я запускаю простой npm install, чтобы получить наш общий доступ к серверам node_modules. Оба проекта смешанные машинописные и javascript. Когда я запускаю webpack, чтобы попытаться объединить сервер, он работает нормально, файлы Typescript из общего доступа появляются в списке комплектов, но когда я запускаю node dist/app.bundle.js - он не может разрешить некоторые модули (в частности, все машинописные) , Когда я запускаю webpack --json, я нахожу это (кажется, что оно разрешается правильно):

    {
      "id": "mgt-shared/discounts/discount_reasons",
      "identifier": "external \"mgt-shared/discounts/discount_reasons\"",
      "name": "external \"mgt-shared/discounts/discount_reasons\"",
      "index": 23,
      "index2": 15,
      "size": 42,
      "built": true,
      "optional": false,
      "prefetched": false,
      "chunks": [
        "main"
      ],
    ...
      "failed": false,
      "errors": 0,
      "warnings": 0,
      "assets": [],
      "reasons": [
        {
          "moduleId": "./src/discounts/discount.ts",
          "moduleIdentifier": "/home/mygastank/WebstormProjects/mygastank/server/node_modules/babel-loader/lib/index.js!/home/mygastank/WebstormProjects/mygastank/server/src/discounts/discount.ts",
          "module": "./src/discounts/discount.ts",
          "moduleName": "./src/discounts/discount.ts",
          "type": "cjs require",
          "userRequest": "mgt-shared/discounts/discount_reasons",
          "loc": "20:24-72"
        },
        {...
      ],
      "providedExports": null,
      "optimizationBailout": [],
      "depth": 6
    },

Моя конфигурация веб-пакета такая:

const nodeExternals = require('webpack-node-externals')
module.exports = {
  mode: 'development',
  target: 'node',
  // This forces resolution of native node modules
  externals: [nodeExternals({ modulesFromFile: true })],
  entry: './src/index',
  output: {
    filename: 'app.bundle.js'
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js', '.json'],
  },
  module: {
    rules: [
      {
      // Include ts, tsx, js, and jsx files.
      test: /\.(ts|js)?$/,
      loader: 'babel-loader',
      include: [/node_modules\/mgt-shared/],
      exclude: [/node_modules/],
      options: {
        presets: [
          [
            'env',
            {
              'targets': {
                'node': 'current'
              }
            }
          ],
          ['@babel/preset-typescript',
            { 'allExtensions': true, 'isTSX': true }]
        ]
      }
    }]
  }
}

1 Ответ

0 голосов
/ 08 апреля 2020

Я обнаружил, что существует способ внести в белый список другие каталоги.

Мне нужно было добавить ключ whitelist к параметрам для nodeExternals, например, так:

  externals: [nodeExternals({
    whitelist: [/mgt-shared/],
    modulesFromFile: true
  })],

Все еще смог остаться прежним.

...