我希望将UglifyJS实现到我的Ant构建过程中以替换YUI Compressor.入门的基本步骤是什么?
所以我使用npm install uglify-js安装了npm
我运行的命令是:
cat file1.js file2.js .. fileN.js | uglifyjs -o files.min.js
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
WARN: ERROR: Unexpected token eof «undefined», expected punc «,» [-:630,15]
/usr/local/lib/node_modules/uglify-js/lib/parse.js:199
throw new JS_Parse_Error(message, line, col, pos);
^
Error
at new JS_Parse_Error (/usr/local/lib/node_modules/uglify-js/lib/parse.js:185:18)
at js_error (/usr/local/lib/node_modules/uglify-js/lib/parse.js:199:11)
at croak (/usr/local/lib/node_modules/uglify-js/lib/parse.js:630:9)
at token_error (/usr/local/lib/node_modules/uglify-js/lib/parse.js:638:9)
at expect_token (/usr/local/lib/node_modules/uglify-js/lib/parse.js:651:9)
at expect (/usr/local/lib/node_modules/uglify-js/lib/parse.js:654:36)
at ctor.argnames (/usr/local/lib/node_modules/uglify-js/lib/parse.js:897:52)
at function_ (/usr/local/lib/node_modules/uglify-js/lib/parse.js:902:15)
at expr_atom (/usr/local/lib/node_modules/uglify-js/lib/parse.js:1114:24)
at maybe_unary (/usr/local/lib/node_modules/uglify-js/lib/parse.js:1278:19)
Run Code Online (Sandbox Code Playgroud)
关于这是关于什么或我应该如何修复它的任何想法?
我使用uglifyjs来缩小连接的文件集,这种方法很好但不够好.构建的lib使用名称空间,因此类,函数和常量存储在根名称空间变量中:
(function() {
var root = { api:{}, core:{}, names:{} };
/* util.js file */
root.names.SOME_LONG_NAMED_CONST='Angel';
/* Person.js file */
root.core.Person = function(name) { this.name = name };
/* API.js with the functions we want to expose */
root.api.perform = function(param_for_api) { /* do something */ }
window.lib_name.perform = root.api.perform;
})();
Run Code Online (Sandbox Code Playgroud)
这被缩小为不那么小的版本
(function(){var a={api:{},core:{},names:{}};a.names.SOME_LONG_NAMED_CONST="Angel",a.core.Person=function(a){this.name=a},a.api.perform=function(){},window.lib_name.perform=a.api.perform})();
Run Code Online (Sandbox Code Playgroud)
我理解uglify可能认为root var是一个必须按原样保存并且不能更改的数据结构.有没有办法让uglify破坏根命名空间中的嵌套名称?
我正在项目中使用grunt并创建任务来缩小和连接许多.js文件.
我现在正试图弄清楚如何使用Uglify创建源图,以便其他团队可以轻松地分析控制台中的代码.
我的Gruntfile(在咖啡中)的一部分看起来像这两个:
uglify:
options:
mangle: false
Run Code Online (Sandbox Code Playgroud)
/
grunt.registerTask 'devmin', ['clean', 'concurrent:transform', 'useminPrepare', 'concat', 'uglify', 'usemin', 'copy:build', 'server', 'watch:dist'] # Dev - minifies files
Run Code Online (Sandbox Code Playgroud)
因此,当我在终端上运行"grunt devmin"时,我会有缩小版本,但我无法弄清楚如何为它们创建相关的源图以进行调试.
任何人都有提示?
谢谢!
在NodeJS应用程序中,使用缩小的源代码服务器端有什么好处吗?
我能想到的唯一好处是,较小的JS文件可能会从磁盘上稍微加载一下.但这似乎可以忽略不计,因为它只会影响启动时间.
那么,在将它部署到我们的生产服务器之前,是否有任何理由通过uglify或闭合编译器处理我们的源代码?
我正在尝试获取与Chrome一起使用的JavaScript文件的源地图.当前gulp脚本的问题在于源映射(Browserify创建)导致文件的缩小版本.
例如,假设app.jsx是Browserify的一个入口文件,它拥有require('a')并require('b')调用它.app.jsx获得浏览器化,重新设置和uglifyied并按预期写入app.js.但是,模块a和模块b中的所有源映射引用也都会缩小:
var gulp = require('gulp'),
browserify = require('browserify'),
watchify = require('watchify'),
source = require('vinyl-source-stream'),
buffer = require('vinyl-buffer'),
bundler;
bundler = browserify({
entries: '/app.jsx',
cache: {},
packageCache: {},
fullPaths: true
});
bundler
.transform('reactify');
.transform({
global: true
}, 'uglifyify');
bundler = watchify(bundler);
bundler.on('update', function() {
return bundler
.bundle()
.pipe(source('app.js'))
.pipe(buffer())
.pipe(gulp.dest('/js'));
});
Run Code Online (Sandbox Code Playgroud)
有关如何使其工作的任何想法?
目前,在开发Wordpress主题时,我使用一个简单的批处理文件来uglify我的js.一个示例批处理文件makebundle.bat
call uglifyjs^
src/file1.js^
src/file2.js^
-cmo bundle.min.js
Run Code Online (Sandbox Code Playgroud)
然后我用watch它来构建它
watch makebundle src
Run Code Online (Sandbox Code Playgroud)
一切都很简单.现在,我想使这个特定于Windows的流程更少.由于这里概述的
原因,
我不想使用Grunt/Gulp,并且正在考虑尝试
使用npm作为构建工具.唯一的麻烦是,我无法从内部找到如何配置uglifyjspackage.json
编辑
这是我想要工作的一个例子package.json:
{
"uglifyConfig": [
{
"outfile": "bundle.min.js,
"files": [
"src/file1.js",
"src/file2.js"
]
"config": {
"mangle": true,
"compress": true
}
}
]
}
Run Code Online (Sandbox Code Playgroud) 我有一些JavaScript代码,我需要从中找到每个文字正则表达式的起始+结束索引.
如何从UglifyJS中提取此类信息?
var uglify = require('uglify-js');
var code = "func(1/2, /hello/);";
var parsed = uglify.parse(code);
Run Code Online (Sandbox Code Playgroud)
我进入变量的结构parsed非常复杂.而我所需要的只是[{startIdx, endIdx}, {startIdx, endIdx}]每个字面正则表达式的数组.
PS如果有人认为可以通过比UglifyJS更好的方式完成同样的任务,欢迎提出建议!
UPDATE
我知道如果我深入研究解析后的结构,那么对于每个正则表达式我都可以找到对象:
AST_Token {
raw: '/hello/',
file: null,
comments_before: [],
nlb: false,
endpos: 17,
endcol: 17,
endline: 1,
pos: 10,
col: 10,
line: 1,
value: /hello/,
type: 'regexp'
}
Run Code Online (Sandbox Code Playgroud)
我需要弄清楚如何从解析的结构中提取所有这些对象,这样我就可以编译位置索引列表.
例如,如果我们有一个这样的类:
class MyClass {
className: string;
}
Run Code Online (Sandbox Code Playgroud)
是否可以在编译时将“MyClass”分配给 className 属性?
编辑:已经尝试过 this.constructor.name。但是,后者对缩小代码没有帮助。因此检查是否有办法在将 typescript 代码编译为 JS 时捕获类名。我正在使用 angular-cli。
我想从生成的捆绑包中树摇动lodash以及我未使用的multiply功能webpack
我有2个主要文件app.js&math.js
它包含以下代码 -
import map from "lodash/map";
import { sum } from "./math";
console.log("");
console.log(`2 + 3 = ${sum(2, 3)}`);
map([1, 2, 3], x => {
console.log(x);
});
Run Code Online (Sandbox Code Playgroud)
export const sum = (a, b) => a + b;
export const multiply = (m, n) => m * n;
Run Code Online (Sandbox Code Playgroud)
const path = require("path");
const webpack = require("webpack");
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
const Jarvis = require("webpack-jarvis");
let plugins = [new …Run Code Online (Sandbox Code Playgroud) uglifyjs ×10
javascript ×8
minify ×3
node.js ×3
uglifyjs2 ×2
angular-cli ×1
browserify ×1
concat ×1
gruntjs ×1
gulp ×1
npm ×1
package.json ×1
reactify ×1
source-maps ×1
typescript ×1
watch ×1
webpack ×1
webpack-2 ×1