我一直看到让JS文件准备好生产的建议是concat然后uglify.
例如这里,在约曼的咕噜任务上.
默认情况下,流程为:concat - > uglifyjs.
考虑到UglifyJS可以同时进行连接和缩小,为什么你需要同时使用两者?
谢谢.
我有一个通过webpack捆绑的同构React应用程序.
我有2个入口点对应2个捆绑文件输出:vendors.js和app.js.
当运行webpack-dev-server或没有任何优化标志进行编译时,一切正常.但是,只要我尝试使用Uglify插件,编译后的输出就会包含错误.
我试过了:
vendors.js
app.js
或者在配置中:
vendors.js
但都会导致相同的运行时错误(未定义的变量).
有什么明显可能导致这种情况吗?Uglify是否过度热心并且删除了不应该的东西?
是否可以使用UglifyJS压缩多个文件?
就像是...
uglifyjs -o app.build.js appfile1.js appfile2.js ...
Run Code Online (Sandbox Code Playgroud)
另外,我在Windows命令提示符下通过NodeJS运行Uglify
我有一个如下目录:
/folder/b.js
/folder/jQuery.js
/folder/a.js
/folder/sub/c.js
我想按顺序在一个js文件中缩小所有这些js文件:
jQuery.js - > a.js - > b.js - > c.js
问:
1.如何通过grunt-contrib-uglify来实现?(实际上,有很多文件,单独指定所有源文件路径是不切实际的)
2.btw,如何在调试时获取未经文明化的文件,并在发布时获得缩小的单个文件,而无需更改html中的脚本标记(以及如何编写脚本标记)?
我在grunt buildYeoman生成的Angular应用程序上遇到问题,使用Coffee和Slim,所有库都是最新的.(该应用程序刚刚在几天前使用最新的生成器生成.)
grunt build而grunt server这两个最初的罚款.但经过几天的开发使用后grunt server,我发现grunt build已完全停止工作.
我修复了一些不同的问题.最大的一点就是我不得不完全放弃Slim用于我的索引文件并使用直接HTML,因为grunt build在发布时,莫名其妙地删除了80%的索引文件/dist.
不幸的是,在我几乎解决了所有问题后,我开始在我的一个Angular指令中收到此错误:
未捕获错误:未知提供者:aProvider < - a
问题似乎在于uglify.我认为这可能与此处报道的问题相同,但我并不十分确定.我尝试了许多解决方案,但唯一对我有用的是从我的coffeescript手动生成干净的js文件,将文件复制到其中/dist,然后将路径写入dist/index.html.
显然这不是最优的.我确信在Grunt中有一个更简洁的方法(可能完全从构建过程中删除缩小,就像其他用户在上面的链接中所做的那样),但我是新手并且尚未弄清楚如何要做到这一点.无论哪种方式,它都是一种解决方法.
我的Gruntfile非常基本:我只在默认文件中添加了grunt-connect-proxy,grunt-contrib-sass和grunt-slim.事实上,我试图引入一个干净的,新生成的Gruntfile,但它没有更好的构建.
失败的指令如下.错误实际上出现在控制器的第一行,$scope.showInput = false.令人沮丧的是,一切都很好grunt server.我建立的那一刻,它完全崩溃了.
myModule.directive "editable", ->
controller = ($scope) ->
$scope.showInput = false
$scope.saveContent = ->
$scope.toggleContent()
$scope.save()
linker = (scope, element, attrs) ->
scope.toggleContent = ->
scope.showInput = not scope.showInput
setTimeout((-> element.find('input').focus()), 100)
return DDO =
restrict: 'E' …Run Code Online (Sandbox Code Playgroud) 我有一个正在使用grunt进行构建和部署的工作requirejs项目.如果根本不使用优化,那么构建工作没有问题,我得到一个大的js文件来在生产中部署它.
我遇到的问题是,我有一些外部框架(如angularJS),我已经有了它的最小化/优化版本,并且不想再次优化它.
目前没有优化我通过我的gruntfile中的单独路径配置包含此框架的缩小版本.而在我的普通main.js中,我有非缩小版本用于开发.
现在我想使用优化器来优化我自己的代码,但是不要优化外部框架.但是外部框架应该包含在生成的大javascript文件中.基本上我想告诉优化器他应该在某些情况下使用原始文件.
我可以这样做吗?
我只找到了一个全局排除选项,因此有些模块根本不包含在生成的优化js中.
这是我的咕噜声配置:
requirejs: {
compile: {
options: {
baseUrl: "<%= pkg.folders.jsSource %>",
name: "../external-libs/almond-0.1.1",
include: "main",
mainConfigFile: "<%= pkg.folders.jsSource %>/main.js",
out: "<%= pkg.folders.build + pkg.name + '-' + pkg.version %>/js/main.js",
//logLevel: 0,
optimize: "uglify2",
//optimize: "none",
paths: {
'angular':'../external-libs/min/angular-1.0.4',
'jquery':'../external-libs/min/jquery-1.7.2',
'jquery.mobile':'../external-libs/min/jquery.mobile-1.2.0',
'adapter': '../external-libs/min/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/min/iscroll-4.2.5',
'iscrollview': '../external-libs/min/jquery.mobile.iscrollview-1.2.6',
'add2Home': '../external-libs/min/add2home',
'config/config': "config/<%=configDatei%>"
}
}
}
},
Run Code Online (Sandbox Code Playgroud)
这是main.js的相关部分:
require.config({
paths:{
'angular':'../external-libs/angular-1.0.4',
'jquery':'../external-libs/jquery-1.7.2',
'jquery.mobile':'../external-libs/jquery.mobile-1.2.0',
'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0',
'moment': '../external-libs/moment-1.6.2.min',
'iscroll': '../external-libs/iscroll-4.2.5',
'iscrollview': '../external-libs/jquery.mobile.iscrollview-1.2.6',
'add2Home': '../external-libs/add2home'
},
shim:{ …Run Code Online (Sandbox Code Playgroud) 我有以下gulp任务:
gulp.task('scripts', function() {
return gulp.src(['app/js/app.js', 'app/config/config.js', 'app/js/controllers.js', 'app/js/directives.js' , 'app/js/filters.js', 'app/js/footer.js',
'app/js/guideTour.js', 'app/js/mobileBanner.js', 'app/js/services.js', 'app/js/youtube.js', 'app/js/dataSync.js', 'app/js/addthis.js'])
//.pipe(jshint('.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(ngmin())
.pipe(gulp.dest('app/dist/js'))
.pipe(rename({suffix: '.min'}))
.pipe(uglify())
.pipe(gulp.dest('app/dist/js'))
.pipe(livereload(server))
.pipe(notify({ message: 'Scripts task complete' }));
});
Run Code Online (Sandbox Code Playgroud)
问题是连接文件也是ngmin()的输出,工作正常,但在解密代码后,某些东西中断,我得到以下错误.
没有具体的指标从哪里开始调试.
堆栈跟踪:
Error: [$injector:unpr] http://errors.angularjs.org/1.2.9/$injector/unpr?p0=eProvider%20%3C-%20e
at Error (native)
at http://localhost:8000/angular/angular.min.js:6:449
at http://localhost:8000/angular/angular.min.js:32:125
at Object.c [as get] (http://localhost:8000/angular/angular.min.js:30:200)
at http://localhost:8000/angular/angular.min.js:32:193
at c (http://localhost:8000/angular/angular.min.js:30:200)
at Object.d [as invoke] (http://localhost:8000/angular/angular.min.js:30:417)
at http://localhost:8000/angular/angular-route.min.js:10:302
at Object.q [as forEach] (http://localhost:8000/angular/angular.min.js:7:380)
at http://localhost:8000/angular/angular-route.min.js:10:248
Run Code Online (Sandbox Code Playgroud) 我收到一个错误,
'意外的令牌:名字(bazz)'
当我的咕噜声任务正在运行uglify时.我在那一行上唯一注意到的是我使用'let'关键字而不是'var',所以我不确定为什么会抛出这个错误.
我有一个if else语句,每个都有let varName,即:
function foo (bar) {
if (condition) {
let bazz = fn();
//doSomething with bazz
_.assign(bar, bazz);
} else {
let bazz = fn2();
//doSomething different with bazz
_.assign(bar, bazz);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过var bazz = {};在if else子句之前使用它来改变它,但我想避免这种情况,因为我必须将bazz分配给fn()和fn2().
想知道是否有其他人遇到过这个以及他们做了什么来修复它.提前致谢!
我正在使用Enyo2编写一个应用程序,它带有一个基于UglifyJS的缩小工具.我注意到了:
var t = false
Run Code Online (Sandbox Code Playgroud)
被替换为
var t=!1
Run Code Online (Sandbox Code Playgroud)
同样的方式将被替换为!0.我确信有一个很好的解释,我找不到它.任何的想法?
我正在使用terser-js缩小我的代码.
输出:
a.prototype.a = ...
a.prototype.b = ...
a.prototype.c = ...
Run Code Online (Sandbox Code Playgroud)
我想要的是:
var h = a.prototype
h.a = ...
h.b = ...
h.c = ...
Run Code Online (Sandbox Code Playgroud)
请注意,我无法手动编写它,因为输入是从中生成的TypeScript.