首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与angular-cli相比,无法使用webpack + angular实现相同级别的捆绑优化

与angular-cli相比,无法使用webpack + angular实现相同级别的捆绑优化
EN

Stack Overflow用户
提问于 2019-03-12 05:04:20
回答 1查看 517关注 0票数 0

我有两个相同的Angular项目,一个是angular-cli,另一个是使用@ngtools/webpack的Webpack版本。这两个项目都运行Angular 7.1.4和@angular-devkit 0.13.5。Angular代码是使用angular-cli生成的初始应用程序模块/组件。

我遇到的问题是,Webpack版本生成了一个450KB的压缩应用捆绑包,而angular-cli的捆绑包是238KB。如果没有TerserPlugin,angular-cli的应用程序包是1.51MB,而Webpack的输出是1.62MB。

对于angular-cli,我使用以下配置运行"ng build --prod=true“:

代码语言:javascript
复制
"production": {
  "fileReplacements": [
    {
      "replace": "src/environments/environment.ts",
      "with": "src/environments/environment.prod.ts"
    }
  ],
  "optimization": true,
  "outputHashing": "all",
  "sourceMap": false,
  "extractCss": true,
  "namedChunks": false,
  "aot": true,
  "extractLicenses": true,
  "vendorChunk": false,
  "buildOptimizer": true,
  "budgets": [
    {
      "type": "initial",
      "maximumWarning": "2mb",
      "maximumError": "5mb"
    }
  ]
}

这是我的Webpack配置:

代码语言:javascript
复制
{
    mode: 'production',
    entry: {
        app: './src/main',
    },
    output: {
        path: path.resolve(__dirname, 'public'),
        filename: "[id].[chunkhash].js",
        chunkFilename: "[id].[chunkhash].js",
    },
    resolve: {
        extensions: ['.ts', '.tsx', '.mjs', '.js'],
    },
    module: {
        rules: [
            {
                test: /\.html$/,
                loader: 'raw-loader',
            },
            {
                test: /\.scss$/,
                use: [
                    'to-string-loader',
                    {
                        loader: 'css-loader',
                        options: {
                            sourceMap: false
                        }
                    },
                    {
                        loader: 'sass-loader',
                        options: {
                            sourceMap: false
                        }
                    },
                ]
            },
            {
                test: /\.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)$/,
                loader: 'file-loader',
            },
            {
                test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/,
                loader: '@ngtools/webpack'
            },
            {
                test: /[\/\\]@angular[\/\\]core[\/\\].+\.js$/,
                parser: { system: true },
            },
            {
                test: /\.js$/,
                use: [
                    {
                        loader: '@angular-devkit/build-optimizer/webpack-loader',
                        options: { sourceMap: false },
                    },
                ],
            },
        ]
    },
    optimization: {
        minimizer: [
            new TerserPlugin({
                cache: true,
                terserOptions: {
                    compress: {
                        pure_getters: true,
                        passes: 3,
                        global_defs: {
                            ngDevMode: false,
                        },
                    },
                    output: {
                        ascii_only: true,
                        comments: false,
                        safari10: true,
                        webkit: true,
                    },
                },
            })
        ],
        providedExports: true,
        usedExports: true,
        concatenateModules: true,
        runtimeChunk: true,
    },
    plugins: [
        new AngularCompilerPlugin({
            tsConfigPath: path.resolve(__dirname, './tsconfig.json'),
            entryModule: path.resolve(__dirname, './src/app/app.module#AppModule'),
            mainPath: path.resolve(__dirname, './src/main.ts'),
        })
    ]
};

看一下带有BundleAnalyzerPlugin的包,node_modules的stat大小对于两个项目都是1.52MB,但是angular-cli的解析大小是238KB,而对于Webpack的是441KB。据我所知,node_modules中有大约100KB的差异,即使这两个包是相同的版本。

angular-cli:

Webpack:

这是怎么回事,我如何才能为两个项目实现相同的优化水平?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-13 10:00:42

看起来在Webpack项目中的问题是tsconfig "module“设置是"commonjs”。将其更改为"es2015",就像angular-cli应用程序中的默认设置一样,现在可以将应用程序编译到248KB。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55110386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档