我有一个如下目录:
/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中的脚本标记(以及如何编写脚本标记)?
我使用concat将JS文件合并到一个文件中,并使用uglify来最小化JavaScript.如何创建使用源JS文件的sourcemaps文件?
我目前的gruntfile:
concat: {
options: {
// define a string to put between each file in the concatenated output
separator: ';'
},
dist: {
// the files to concatenate
src: ['<%= config.src %>/js/**/*.js'],
// the location of the resulting JS file
dest: '<%= config.dist %>/js/main.js'
}
},
uglify: {
dist: {
files: {
'<%= config.dist %>/js/main.min.js': ['<%= concat.dist.dest %>']
}
}
},
Run Code Online (Sandbox Code Playgroud) gruntjs source-maps grunt-contrib-concat grunt-contrib-uglify
我收到一个错误,
'意外的令牌:名字(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().
想知道是否有其他人遇到过这个以及他们做了什么来修复它.提前致谢!
我正在使用标准minify/uglify用于css/js文件,并将多个文件组合到main.min.css或app.min.js ...但是我的.html文件需要修改为指向这些新文件名<link>或者<script>
有没有办法实现自动化?或者如何自动修改.html文件以重命名那里的文件名gruntjs?
这是我的Gruntfile.js
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
uglify: {
options: {
mangle: true
}
build: {
src: "js/*.js",
dest: "js/min/script.js"
}
}
});
grunt.loadNpmTasks("grunt-contrib-uglify");
grunt.registerTask('default', [uglify]);
};
Run Code Online (Sandbox Code Playgroud)
这是我的package.json - 我已经运行npm install了,我将在我的Gruntfile中使用所有插件,grunt-contrib-uglify就是其中之一.
{
"name": "bootbuckle",
"version": "0.1.0",
"engines": {
"node": ">= 0.10.0"
},
"devDependencies": {
"grunt": "~0.4.2",
"grunt-contrib-watch": "~0.5.3",
"grunt-contrib-sass": "~0.6.0",
"grunt-csscomb": "~2.0.1",
"grunt-contrib-htmlmin": "~0.1.3",
"grunt-contrib-imagemin": "~0.4.1",
"grunt-contrib-uglify": "~0.2.7"
}
}
Run Code Online (Sandbox Code Playgroud)
当我只是grunt在终端中运行时 - 这是错误
build: {
^^^^^
Loading "Gruntfile.js" tasks...ERROR
>> SyntaxError: Unexpected identifier
Warning: Task …Run Code Online (Sandbox Code Playgroud) 我正在使用gruntjs(使用uglifyjs)来构建我的Angularjs应用程序.但是uglifyjs仍然不支持es6,所以在相应的GitHub问题中我发现了这一点.所以现在有uglify-es,它似乎支持es6.但我不确定如何将它与grunt集成.现在我有模块"grunt-contrib-uglify",它有一个依赖uglifyjs,现在使用.我怎样才能使用咕噜声uglify-es呢?
javascript uglifyjs gruntjs ecmascript-6 grunt-contrib-uglify
我没有找到一个好方法来grunt-uglify多个脚本文件分布在多个文件夹,同时保持文件夹结构包括uglified文件完好无损.我想要这样做的唯一原因是能够提高我正在处理的网页的"遗留"部分的性能.
我已经找到了解决这个问题的方法,我不想做,因为它需要花费很多时间,就像在这个答案中一样(它们分别指定每个src和dest对): 如何配置grunt. js分别缩小文件
我想要实现的一个例子:
**src dir (no uglify applied):**
src
|- app1
|- randomFile.js
|- scripts
|- file1.js
|- file2.js
|- libs
|- file3.js
|- file4.js
|- app2
|- scripts
|- file1.js
|- file2.js
**destination dir (uglify applied, same file name):**
dist
|- app1
|- randomFile.js
|- scripts
|- file1.js
|- file2.js
|- libs
|- file3.js
|- file4.js
|- app2
|- scripts
|- file1.js
|- file2.js
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果可能的话,想对CSS文件做同样的事情.
有谁知道这是否可能?
使用grunt-contrib-uglify生成的源地图时,Chrome/Safari中的调试器不会显示未编码的变量名称.源代码显示和调试正确.我已经验证源映射包含变量名称.这是uglify中的错误吗?
原始来源:
// two
function two()
{
var test = "test";
console.log("this is a " + test);
}
Run Code Online (Sandbox Code Playgroud)
生成的来源:
function two(){var a="test";console.log("this is a "+a)}
//# sourceMappingURL=all.min.js.map
Run Code Online (Sandbox Code Playgroud)
来源地图:
{
"version": 3,
"file": "all.min.js",
"sources": ["../src/two.js"],
"names": ["two","test","console","log"],
"mappings":";;AAEA,QAASA,OAEL,GAAIC,GAAO,MAEXC,SAAQC,IAAI,aAAeF",
"sourceRoot":"../"
}
Run Code Online (Sandbox Code Playgroud) javascript debugging google-chrome source-maps grunt-contrib-uglify
我在我的项目中使用了grunt-uglify,我正在使用es6.对于某些es6功能,例如胖箭头功能,它会抛出一个错误.我认为uglify不懂语法.所以我有办法解决这个问题.我的意思是我可以使用任何东西来使uglify理解所有的es6语法吗?
我正在执行一项艰巨的任务:
uglify: {
options: {
report: 'gzip'
},
all: {
expand: true,
flatten: true,
cwd: 'js/',
src: ['*.js', '!*.min.js'],
dest: 'js/min',
ext: '.min.js'
}
}
Run Code Online (Sandbox Code Playgroud)
在运行报告选项时,文件将压缩到一个文件中
options: {
report: 'gzip'
}
Run Code Online (Sandbox Code Playgroud)
我看到gzip压缩时文件会明显变小,但输出文件不是gzip压缩的,它们是"缩小"报告的大小.
所以问题是,我如何配置uglify来gzip文件.或者这是一项不同任务的任务?
javascript ×9
gruntjs ×8
uglifyjs ×3
ecmascript-6 ×2
node.js ×2
source-maps ×2
debugging ×1
html ×1