【发布时间】:2016-07-14 07:51:31
【问题描述】:
我们有很多单独的 JavaScript 文件,当然它们在生产环境中被压缩成各种其他文件。目前我们在命令行中使用Microsoft Ajax Minifier 来执行此任务,但目的是切换到gulpjs。
缩小过程本身好像没问题,所有的输出文件都生成了,没有错误写入输出等等。
但我有一个奇怪的问题,gulpjs 生成的 16 个缩小文件中有 4-5 个会抛出各种错误,例如:
无法读取未定义的属性“...”
或
Uncaught TypeError: (intermediate value)(intermediate value)(...) is not a function
Ajax minifier 调用如下:
AjaxMin.exe -js -xml .\minify.xml -clobber -evals:safeall
来自minify.xml的示例:
<?xml version="1.0" encoding="utf-8"?>
<root>
<output path="..\js\min\main.min.js">
<input path="..\js\filename1.js"/>
<input path="..\js\filename2.js"/>
<input path="..\js\filename3.js"/>
...
</output>
<output path="..\js\min\report.min.js">
<input path="..\js\filename4.js"/>
<input path="..\js\filename5.js"/>
<input path="..\js\filename6.js"/>
...
</output>
...
</root>
来自gulpfile.js的样本
gulp.task("[js]minify-all", function () {
var mainFiles = [
"./js/filename1.js",
"./js/filename2.js",
"./js/filename3.js",
];
var reportFiles = [
"./js/filename4.js",
"./js/filename5.js",
"./js/filename6.js",
];
...
generateMinifiedFile(mainFiles, "./js/min/", "main");
generateMinifiedFile(reportFiles, "./js/min/", "report");
...
}
var generateMinifiedFile = function(inputFiles, outputPath, outputFileName) {
gulp.src(inputFiles)
.pipe(concat(outputFileName + ".js"))
.pipe(minify({
ext: {
min: ".min.js"
},
noSource: true
}))
.pipe(gulp.dest(outputPath));
};
如果有问题,这里是package.json
{
"name": "package",
"version": "1.0.0",
"private": true,
"devDependencies": {
"gulp": "3.9.1",
"gulp-bower": "0.0.13",
"gulp-concat": "^2.6.0",
"gulp-config": "0.3.0",
"gulp-less": "3.0.5",
"gulp-minify": "0.0.12",
"gulp-minify-css": "1.2.4",
"gulp-plumber": "1.1.0",
"gulp-watch": "4.3.5"
}
}
总结一下:
- 使用非缩小的 js 文件,网站运行良好。
- 使用
AjaxMin.exe创建的缩小的js文件,网站运行良好。 - 使用由
gulpjs创建的缩小的 js 文件,站点中断。
有人有什么我想念的建议吗?
更新
创建控制器示例:
var settingsModule = angular.module("settingsModule", ["rootModule"]);
settingsModule.controller('settingsCasesController', ["$rootScope", "$scope", "$http", "DataService", function ($rootScope, $scope, $http, dataService) {
...
}
【问题讨论】:
-
您是否使用 Angular 可能在您的资源中?
-
@IlyaNovojilov 是的,角度文件是页面上的直接引用,因此它们不会被缩小到任何输出文件中
-
你缩小你的角度指令吗?如果是这样stackoverflow.com/questions/18782324/…
-
@IlyaNovojilov 是的,他们应该是安全的(我必须检查一下才能给出 100% 肯定的答案),但是使用AjaxMin 也是?
-
@IlyaNovojilov 仔细检查,角度指令是缩小安全的
标签: javascript gulp minify gulp-minify