webpack не может объединять файлы, когда tsc

У меня возникли проблемы с получением webpack для создания моих файлов. он просто выдает кучу ошибок одной и той же формы, говоря:

ERROR in ./node_modules/typescript-rest/dist/server.js
Module not found: Error: Can't resolve 'typescript-ioc/es6' in '/Users/Jack/NODE/ts-rest-session/node_modules/typescript-rest/dist'

похоже, он неправильно загружает node_modules.

tsc и ts-node могут нормально собирать/запускать проект. Вот мои конфиги:

tsconfig.json

{
  "compilerOptions": {
    "outDir": "./dist/",
    "sourceMap": true,
    "noImplicitAny": true,
    "module": "commonjs",
    "target": "es5",
    "lib": ["es2015", "dom"],
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

webpack.config.js

module.exports = {
  entry: {
    server: './server.ts'
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      }
    ]
  },
  resolve: {
    modules: ["node_modules"]
    extensions: ['.tsx', '.ts', '.js', '.json']
  },
  output: {
    filename: '[name].bundle.js',
    path: __dirname + 'dist'
  }
};

если у кого-то есть идеи, я весь внимание! я пытался удалить node_modules из исключения module.rules[0] в webpack.config.json.


person Jack Bliss    schedule 25.07.2018    source источник


Ответы (1)


Если вы хотите разрешать модули в соответствии с baseUrl и путями в вашем tsconfig.json, вы можете использовать пакет tsconfig-paths-webpack-plugin. Подробнее об этой функции см. в документации по разрешению модуля.

Для этой функции требуется webpack 2.1+ и TypeScript 2.0+. Используйте приведенную ниже конфигурацию или проверьте пакет для получения дополнительной информации об использовании.

const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

module.exports = {
...
    resolve: {
        plugins: [new TsconfigPathsPlugin({ /*configFile: "./path/to/tsconfig.json" */ })]
        }
...
}

https://github.com/TypeStrong/ts-loader/blob/master/README.md


ИЗМЕНИТЬ

Кажется, вы пытаетесь создать что-то для узла, по умолчанию веб-пакет строится для Интернета. Поэтому вам нужно указать правильную цель в файле webpack.config. Также у вас отсутствует "," внутри разрешения, и ваш выходной путь должен быть примерно таким: path: __dirname + '/dist'

Я попытался воспроизвести вашу проблему, и эта конфигурация отлично работает для меня:

var nodeExternals = require('webpack-node-externals');

module.exports = {
  mode: 'development',
  entry: './server.ts',
  // in order to ignore built-in modules like path, fs, etc. 
  target: 'node', 
  // in order to ignore all modules in node_modules folder
  externals: [nodeExternals()], 
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  },

  // Enable sourcemaps for debugging webpack's output.
  devtool: 'source-map',

  resolve: {
    // Add '.ts' and '.tsx' as resolvable extensions.
    extensions: ['.ts', '.tsx', '.js', '.json']
  },

  module: {
    rules: [
      // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
      {
        test: /\.tsx?$/,
        loader: 'awesome-typescript-loader',
      },

      // All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
      {
        enforce: 'pre',
        test: /\.js$/,
        loader: 'source-map-loader'
      },
    ]
  },
};
person Charles Assuncao    schedule 26.07.2018
comment
спасибо за Ваш ответ! я не хочу делать это обязательно - я думаю, что пропустил шаг, на котором я пытаюсь разрешить модули в соответствии с базовым URL-адресом. Можно ли что-то изменить, чтобы не использовать этот плагин? webpack.config и tsconfig находятся в корне моего проекта. - person Jack Bliss; 26.07.2018
comment
я попробовал это с этой конфигурацией, и это все еще не сработало :( такие же ошибки наряду с некоторыми предупреждениями о запросе зависимости являются выражением, и некоторые другие не могут быть разрешены. начинаю думать, что мне, возможно, придется попробовать что-то другое. - person Jack Bliss; 28.07.2018
comment
Можете ли вы предоставить репродукцию вашего проекта? - person Charles Assuncao; 28.07.2018
comment
вот все на github: github.com/jack-bliss/yomi-gg - person Jack Bliss; 28.07.2018
comment
Отлично, я открыл PR для вашего проекта, протестировал и работает отлично. Также отредактировано здесь, чтобы сохранить правильный ответ здесь - person Charles Assuncao; 28.07.2018