Webpack, babel - node_modules не исключаются из комплекта - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь выяснить, что не так с моей babel, конфигурацией webpack. После сборки у меня есть node_modules внутри моего пакета

Я пробовал другую конфигурацию .babel-rc, terser и awesome-typescript-loader (exclude / node_modules /), но node_modules все еще находятся внутри пакета.

"webpack": "^ 4.41.0",

пряжа запускает clean-dist && webpack -p --config = webpack / prod.js --env.production

  mode: 'production',
    entry: './index.tsx',
    output: {
      filename: 'js/menu.min.js',
      path: resolve(__dirname, '../dist'),
      publicPath: '/static/',
    },
module: {
      rules: [{
          test: /\.js$/,
          use: [{
            loader: 'babel-loader',
            options: {
              plugins: env.production ? [] : ["react-hot-loader/babel"]
            }
          }, 'source-map-loader'],
          exclude: [/node_modules/],
        },
        {
          test: /\.(tsx|ts)?$/,
          use: [{
            loader: 'babel-loader',
            options: {
              plugins: env.production ? [] : ["react-hot-loader/babel"]
            }
          }, 
          {
            loader: 'awesome-typescript-loader',
            options: {
              useBabel: true,
              babelCore: "@babel/core"
            }
          }],
          exclude: [/node_modules/]
        },
},
plugins: [
      new Dotenv({
        path: './environment/' + (env.production ? 'prod' : 'dev') + '.env',
        defaults: './environment/dev.env',
        silent: false
      }),

      new CheckerPlugin(),
      new HtmlWebpackPlugin({
        template: 'index.html.ejs',
      })
    ],
   optimization: {
      minimize: true,
      minimizer: [
        new TerserPlugin({
          cache: './.build_cache/terser',
          exclude: [/node_modules/],
          parallel: true,
          terserOptions: {
              ecma: 5,
              compress: true,
              output: {
                  comments: false,
                  beautify: false
              }
          }
      })
      ]
    }

.babelrc

{
  "presets": [
    ["@babel/preset-env", {"modules": false}],
    "@babel/preset-react"
  ],
  "env": {
    "production": {
      "presets": ["@babel/preset-env", "minify"]
    },
    "test": {
      "presets": ["@babel/preset-env", "@babel/preset-react"]
    }
  }
}

.tsconfig

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "noImplicitAny": false,
        "module": "commonjs",
        "target": "es5",
        "jsx": "react",
        "lib": ["es5", "es6", "dom"]
    },
    "include": [
        "./src/**/*"
    ],
    "awesomeTypescriptLoaderOptions": {
        "reportFiles": [
            "./src/**/*"
        ]
    }
}

https://i.imgur.com/orcJqAT.png

Я ожидаю, что пакет будет без node_modules

1 Ответ

1 голос
/ 04 октября 2019

Когда вы делаете:

import sth from 'sth';

и используете Webpack - код из sth будет в вашем пакете или в некотором фрагменте. Это хорошо.

exclude не означает, что оно не будет включено - это означает, что загрузчик не будет его обрабатывать.

Если вы хотите, чтобы ваши поставщики (node_modules) в отдельном чанке - вы можете использовать вендорный чанк .

Если вы хотите сказать Webpack, что он не должен связывать зависимость - вы можете использовать externals .

...