【问题标题】:Webpack + angular 1.x + gulp + minifyingWebpack + angular 1.x + gulp + minifying
【发布时间】:2017-06-30 23:26:57
【问题描述】:

我在设置 Webpack 以正确缩小我的应用时遇到问题。我正在创建以分隔 JS 文件,一个 vendor.js(库)和 main.js(我的应用程序)。我已经查看并搜索了我的问题,但似乎找不到合适的解决方案。

webpack.config.js

var webpack = require("webpack");
var ngAnnotatePlugin = require('ng-annotate-webpack-plugin');

let vendors = [
  'angular',
  'lodash',
  'moment',
  'angular-ui-router',
  'angular-loading-bar',
  'angular-filter',
  'angular-animate'
];

module.exports = {
  entry: {
    app: './halo/app.js',
    vendor: vendors
  },
  output: {
    filename: './build/main.js'
  },
  plugins: [
    new webpack.optimize.CommonsChunkPlugin({
      name: "vendor",
      filename:"./build/vendor.js"
    }),
    new ngAnnotatePlugin({
      add: true
    }),
    new webpack.optimize.UglifyJsPlugin()
  ],
  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /(node_modules)/,
        loader: 'babel-loader',
        query: {
          presets: ['es2015']
        }
      }
    ]
  }
};

我的问题是,在没有缩小的情况下,该应用程序运行良好。当我缩小应用程序和供应商时,它似乎不起作用。我收到未知的提供程序错误。
我已经阅读了有关 mangling 的信息,但这似乎也不能解决我的问题(除非我做得不好)。我也在所有正确的地方做 ngInject。
我发现这个配置片段可以放入 optimize.UglifyJsPlugin({})

{
  beautify: false, // Don't beautify output
  comments: false, // Eliminate comments
  // Compression specific options
  compress: {
    warnings: false,
    drop_console: true
  },
  mangle: {
    except: ['$'], // Don't mangle $
    screw_ie8 : true, // Don't care about IE8
    keep_fnames: true // Don't mangle function names
  }
}

有人能解释一下吗?

【问题讨论】:

  • 哪些提供商失败了?你的控制器是什么样的?
  • 经过一段时间的调试后,控制器很好,ng-annotate 正在正确注入依赖项,但我收到一个错误,即提供程序“a”不可用。帮助不大,但我仍在解决中
  • 问题似乎与 mangle 选项有关。
  • 您是否尝试过删除 mangle 选项?我使用mangle: { except:['angular'] },这适用于我的项目中的 webpack、uglify、angualr1。我也不使用 ng-annotate,而是在控制器、指令等中手动执行此操作。我知道我遇到了一些问题(ng-annotate)!
  • 我刚试过,不幸的是,它仍然不起作用。但似乎可行的是我只是完全关闭了 mangle 。我想我现在会采用那个解决方案

标签: angularjs webpack gulp minify uglifyjs


【解决方案1】:

不能把它称为cmets,因为我的声誉较低。

您可以做的是,使用strict-di 而不是ng-annotate。解决strict-di 报告的所有问题,然后使用 minification 和 mangling。

strict-di 强制您在代码中以数组格式定义所有依赖项。 read this answer about it

【讨论】:

  • 问题不在于依赖注入。 Webpack 正在正确地注入依赖项。每当它构建输出 js 文件时,我都会看到它
  • 那么另一个问题主要是与window.angular有关的未定义,通过运行应用程序然后开发工具控制台选项卡检查是否
猜你喜欢
  • 2017-06-03
  • 1970-01-01
  • 2017-12-13
  • 2016-02-01
  • 2017-01-12
  • 2016-08-23
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多