Структура вывода Webpack изменяется в зависимости от файлов вне записи - PullRequest
0 голосов
/ 30 января 2020

Моя цель - создать библиотеку компонентов React с помощью TypeScript. Я настроил веб-пакет на связывание своих компонентов, и все работает, как и ожидалось, до тех пор, пока я не создам папку, которая выходит за рамки записи и включает в себя файлы TypeScript.

Я максимально упростил конфигурацию, и я все еще может воспроизвести проблему.

webpack.config.js
const path = require('path');

const jsConfig = {
  entry: './src/components/index.ts',
  module: {
    rules: [
      {
        test: /\.ts(x?)?$/,
        exclude: /node_modules/,
        use: {
          loader: 'awesome-typescript-loader'
        }
      }
    ]
  },
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'index.js',
    libraryTarget: 'commonjs2',
    pathinfo: true
  },
  resolve: {
    extensions: ['.ts', '.tsx', '.js']
  },
  externals: {
    react: 'react',
    'react-dom': 'react-dom'
  },
  optimization: {
    minimize: false,
    usedExports: true,
    sideEffects: false
  },
  mode: 'production'
}

const configuration = [jsConfig];
module.exports = configuration;
tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "jsx": "react",
    "target": "es5",
    "lib": [
      "es2015",
      "dom"
    ],
    "outDir": "dist",
    "sourceMap": false,
    "declaration": true,
    "moduleResolution": "node"
  }
}

Вот исходная структура папок:

|-- node_modules
|-- src
|   `-- components
|       |-- Button
|       |   `-- Button.tsx // Example component
|       `-- index.ts // A file that exports all components
|-- package.json
|-- tsconfig.json
`-- webpack.config.js

Когда я запускаю webpack, он создает папку dist со следующей структурой:

-- dist
   |-- Alert
   |   `-- Alert.d.ts
   |-- index.d.ts
   `-- index.js

Это то, чего я пытаюсь достичь. Однако я хочу добавить, скажем, вспомогательную функцию и создать папку с именем helpers в src. Затем я добавляю простой helper.ts файл и просто добавляю функцию, которая регистрирует что-то на консоли. Я ничего не экспортирую и еще не вызывал вспомогательную функцию . Так что, если я сейчас запущу webpack, dist будет выглядеть так:

-- dist
   |-- components
   |   |-- Alert
   |   |   `-- Alert.d.ts
   |   `-- index.d.ts
   `-- index.js

Полагаю, есть что-то важное, чего мне не хватает в понимании рабочего процесса webpack. Почему эта папка components появляется в выводе сборки? Обратите внимание, что он также оборачивает index.d.ts - определенно не то, для чего я иду.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 февраля 2020

Через несколько дней по этому вопросу, я думаю, я нашел ответ. Я опишу свои шаги по устранению проблемы:

  1. Это не проблема с веб-пакетом .
    Я понял, что если файл helper не имеет расширения TypeScript выходные данные сборки не изменяются.
  2. Нет проблем с загрузчиком TypeScript
    Я заменил awesome-typescript-loader на ts-loader - результаты были такими же, папка вывода структура меняется в зависимости от того, является ли helper файлом TypeScript или нет. Более того, я не нашел никаких опций конфигурации для загрузчика, которые бы решили проблему.
  3. Все дело в конфигурации компилятора TypeScript
    Мне пришлось уделить больше внимания тот факт, что оба загрузчика, которые я пытался использовать, использует tsconfig.json. документы показывают, что я могу установить свойства files или include / exclude объекта конфигурации, которые будут влиять на конечный результат компиляции. Вот ответ на вопрос, почему компилируются неиспользуемые файлы:

Если оба параметра «files» и «include» не указаны, компилятор по умолчанию включает все TypeScript (.ts, Файлы .d.ts и .tsx) в каталоге и подкаталогах, за исключением тех, которые исключены с помощью свойства "exclude".

Еще одна вещь, которую нужно добавить, поскольку я упомянул расположение index.d.ts в структура выходной папки: Моя цель для helper.ts состояла, конечно, в том, чтобы использовать его в компонентах. Поэтому мне пришлось согласиться с тем, что в текущей конфигурации структура выходной папки изменится, поскольку вспомогательный файл был перенесен. Это привело к тому, что файл определения типа закончился в папке components. Я просто переместил index.ts (который экспортирует компоненты) на один уровень выше - в src и обновил файл ввода веб-пакета.

Надеюсь, это кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...