【发布时间】: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