2017-02-13 80 views
1

我无法设置Webpack来正确缩小我的应用程序。我正在创建分离JS文件,一个vendor.js(库)和main.js(我的应用程序)。我看了看周围的问题,似乎无法找到合适的解决方案。

webpack.config.jsWebpack + angular 1.x + gulp + minifying

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'] 
     } 
     } 
    ] 
    } 
}; 

我的问题是,不缩小,应用程序工作正常。当我缩小应用程序和供应商时,它似乎不起作用。我得到未知的提供者错误。
我已阅读过有关捣鼓的问题,但这似乎并没有解决我的问题(除非我没有正确地做)。我也正在ngInject的所有正确的地方。
我发现这个配置SNIPPIT把里面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 
    } 
} 

任何人都可以提供一些线索对这个好吗?

+0

什么提供商失败?你的控制器是什么样的? – garethb

+0

经过一段时间的调试,控制器很好,ng-annotate正在注入依赖关系,但是我得到一个错误提示符'a'不可用。没有太大的帮助,但我仍然在找出它的过程 –

+0

这个问题似乎与mangle选项。 –

回答

0

不能把它作为评论,因为我的声誉较低。

你可以做的是,使用strict-di而不是ng-annotate。解决所有由strict-di报告的问题,然后使用缩小和修正。

strict-di强制您在代码中以阵列格式定义所有依赖关系。 read this answer about it

+0

这个问题不是注入依赖关系。 Webpack正在适当地注入依赖关系。我看到它,只要它建立输出js文件 –

+0

然后另一个问题主要是'window.angular'将会是未定义的,检查是否通过运行应用程序,然后开发工具控制台选项卡 –