如何包括node_modules以捆绑生产?

时间:2019-07-04 10:26:24

标签: typescript webpack

我正在使用TypeScript创建一个NodeJS应用程序,并与Webpack打包在一起。创建捆绑软件时,不会导入所有外部模块,这会导致路径错误。

Google,Stackoverflow,与我的案件无关的信息。

var webpack = require('webpack');
var path = require('path');
var fs = require('fs');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const TsconfigPathsPlugin = require('tsconfig-paths-webpack-plugin');

var nodeModules = {};
fs.readdirSync('node_modules')
  .filter(function (x) {
    return ['.bin'].indexOf(x) === -1;
  })
  .forEach(function (mod) {
    nodeModules[mod] = 'commonjs ' + mod;
  });

module.exports = {
  mode: 'production',
  entry: './src/proxy/main.ts',
  target: 'node',
  output: {
    filename: 'main.js',
    path: path.resolve(path.join(__dirname, '../../'), 'dist/proxy')
  },
  plugins: [
    new UglifyJsPlugin({
      test: /\.js($|\?)/i
    })
  ],
  resolve: {
    extensions: ['.ts', '.tsx', '.js'],
    plugins: [new TsconfigPathsPlugin()]
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        loader: 'ts-loader'
      }
    ]
  },
  externals: nodeModules
};

外部程序很适合开发,但在生产中,我需要将所有外部库捆绑在main.js中。

1 个答案:

答案 0 :(得分:0)

我建议采用这种方式来保存您的配置文件,而使用外部设备则更加方便且性能明智。我假设您将捆绑软件移到另一个目录,因此请确保也将node_modules/移到其他位置,否则节点将找不到依赖项。