我正在尝试从优化的脚本文件中删除版权注释.我们正在使用RequireJS和默认的UglifierJS.我查看了Uglifier,它本身有一个名为-ncor 的标志--no-comments,但看起来似乎并不像RequireJS允许你在构建配置文件中设置该选项.反正有没有这样做?
我正在查看来自UglifyJS的一些内容的输出,并发生在以下代码中:
var a = 0;
var b = function () {
return function () {
a++;
}(), 'Hello, World'
}();
Run Code Online (Sandbox Code Playgroud)
运行后,该代码a是1和b字符串Hello, World!.
乍一看似乎b是undefined因为看起来返回值没有返回值的函数的结果,但后面跟着一个逗号和一个字符串文字.
为什么这样做?
为什么UglifyJS不执行匿名函数然后Hello, World!作为下一个语句返回?
我可以使用以下内容将源Type映射成功编译为单个JS文件:
tsc --sourcemap --out app.js app.ts
Run Code Online (Sandbox Code Playgroud)
我还可以使用UglifyJS成功缩小输出,同时保持源映射的完整性:
uglifyjs app.js --source-map app.js.map --in-source-map app.js.map -o app.js
Run Code Online (Sandbox Code Playgroud)
但是,我想稍微进一步.我想将我编译的TypeScript代码(app.js)与几个第三方JS库合并到一个缩小的文件中,该文件维护源映射指向原始TypeScript(对于我的代码)或JavaScript(对于第三方库).
我尝试过类似的东西,基本上只是将一个JS库文件添加到UglifyJS的输入中:
uglifyjs app.js lib/javascript-library.js --source-map app.js.map --in-source-map app.js.map -o app.js
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎不起作用.它确实将所有内容成功合并到一个文件中,并且似乎保留了TypeScript代码的源映射.但是当我输入错误时lib/javascript-library.js,浏览器中的JS控制台(使用源映射)说错误出现在我的一个TypeScript文件中,这显然是错误的.
我是一个TypeScript newb,我无法想象我是第一个想要将TS输出与随机JS库结合在一个带有源映射的缩小文件中的人,但我找不到任何人在谈论它.也许我的方法完全错了?
我想要的是通过CommonsChunkPluginWebpack 以特定顺序捆绑我的JavaScript供应商文件.
我正在使用CommonsChunkPluginfor Webpack.官方文档的用法很简单直接.它按预期工作,但我相信该插件按字母顺序捆绑我的文件(可能是错误的).插件没有选项来指定它们应该捆绑的顺序.
注意:对于那些不熟悉Bootstrap 4的人来说,它目前需要一个名为Tether的JavaScript库依赖项.必须在Bootstrap之前加载系绳.
webpack.config.js
module.exports = {
entry: {
app: './app.jsx',
vendor: ['jquery', 'tether', 'bootstrap', 'wowjs'],
},
output: {
path: __dirname + '/dist',
filename: 'bundle.js',
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'vendor.bundle.js'
}),
new webpack.optimize.UglifyJsPlugin(),
],
};
Run Code Online (Sandbox Code Playgroud)
这里发生了两件事:
vendor.bundle.js包含bootstrap,jquery,tether,
wowjsbundle.js 包含我的其余应用程序为了捆绑:
正确的: jquery,tether,bootstrap,wowjs
不正确的: bootstrap,jquery,tether,wowjs
请注意,在我的webpack.config.js中, …
我正在编写一个使用许多JS文件的应用程序.Underscore,Backbone,jQuery,用于滑块的jQuery插件,用于模型,路由器,集合和视图的多个文件.
在我的开发机器中,我分别加载每个文件,但在生产中我只使用一个JS文件(minified,gziped,less http req等).
在我的构建过程中,每个文件都用UglifyJS缩小,然后连接到prod.js. 这是构建该文件的正确方法吗?或者我应该将每个文件连接到prod.js然后用UglifyJS缩小?
非常感谢!
我正在尝试使用UglifyJS来最小化/压缩我的bundle.js文件.当我跑步时webpack -p,我得到以下内容:
ERROR in bundle.js from UglifyJs
Name expected [bundle.js:105519,6]
105519行如下:
const {M, l, pattern} = __webpack_require__(862).
我正在使用React w/ES6.对于什么是错的任何想法?
试图为我的js库准备好的构建环境.根据网络上的评论,UglifyJS似乎是最好的压缩模块之一,在NodeJS下工作.所以这里是建议缩小代码的最佳方法:
var jsp = require("uglify-js").parser;
var pro = require("uglify-js").uglify;
var orig_code = "... JS code here";
var ast = jsp.parse(orig_code); // parse code and get the initial AST
ast = pro.ast_mangle(ast); // get a new AST with mangled names
ast = pro.ast_squeeze(ast); // get an AST with compression optimizations
var final_code = pro.gen_code(ast); // compressed code here
Run Code Online (Sandbox Code Playgroud)
如此处所示,pro.ast_mangle(ast)应该修改变量名称,但事实并非如此.我从这个管道中得到的只是javascript代码,没有空格.起初我认为我的代码没有针对压缩进行优化,但后来我尝试使用Google Closure并进行了相当大的压缩(包含变量名称和所有内容).
UglifyJS专家,任何暗示我做错了什么?
更新:
实际代码太大,无法在此处引用,但即使是这样的代码段也不会被破坏:
;(function(window, document, undefined) {
function o(id) {
if (typeof id !== …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来防止r.js(RequireJS'优化脚本)使用我们的JS模块来保持可读性以便进行调试.我希望脚本(顺便在Node.js上运行)有一些命令行选项可以传递.不幸的是,文档是否相当差.
我正在使用gruntjs(使用uglifyjs)来构建我的Angularjs应用程序.但是uglifyjs仍然不支持es6,所以在相应的GitHub问题中我发现了这一点.所以现在有uglify-es,它似乎支持es6.但我不确定如何将它与grunt集成.现在我有模块"grunt-contrib-uglify",它有一个依赖uglifyjs,现在使用.我怎样才能使用咕噜声uglify-es呢?
javascript uglifyjs gruntjs ecmascript-6 grunt-contrib-uglify
当尝试将rails 5应用程序部署到heroku时,我遇到以下错误Running: rake assets:precompile:
remote: ExecJS::ProgramError: SyntaxError: Unexpected token: name (autoRegisterNamespace) (line: 14767, col: 7, pos: 457487)
remote: Error
remote: at new JS_Parse_Error (<eval>:3623:11948)
remote: at js_error (<eval>:3623:12167)
remote: at croak (<eval>:3623:21858)
remote: at token_error (<eval>:3623:21995)
remote: at unexpected (<eval>:3623:22083)
remote: at semicolon (<eval>:3623:22601)
remote: at simple_statement (<eval>:3623:25779)
remote: at <eval>:3623:23567
remote: at <eval>:3623:22774
remote: at block_ (<eval>:3623:27903)
remote: at <eval>:3623:23677
remote: at <eval>:3623:22774
remote: new JS_Parse_Error ((execjs):3623:11948)
remote: js_error ((execjs):3623:12167)
remote: croak ((execjs):3623:21858)
remote: token_error ((execjs):3623:21995)
remote: …Run Code Online (Sandbox Code Playgroud) uglifyjs ×10
javascript ×9
ecmascript-6 ×2
optimization ×2
requirejs ×2
webpack ×2
compression ×1
deployment ×1
execjs ×1
gruntjs ×1
heroku ×1
js-amd ×1
minify ×1
performance ×1
r.js ×1
reactjs ×1
ruby ×1
source-maps ×1
typescript ×1
webpack-2 ×1