标签: uglifyjs

如何加快UglifyJS 2的缩小过程?

我正在使用UglifyJS 2来连接和缩小一堆JavaScript文件(不要太多,大约5到10).此过程使用UglifyJS 2的默认设置从Node.js中运行.

这些文件基本上是Require.js,jQuery,Backbone.js,Backbone.js Marionette,Moment.js以及一些其他(较小的)辅助文件,所有这些都在未压缩(即开发)版本中.

问题是这个过程几乎需要10秒钟.

如果我通过移交完全禁用缩小

{ compress: false }
Run Code Online (Sandbox Code Playgroud)

作为一种选择,它的速度要快得多,但它仍然需要大约2秒钟.

问题1:即使是少量文件,UglifyJS 2通常需要那么长时间吗?或者我最有可能做错了什么?

问题2:如何在不禁用UglifyJS 2的所有有用选项的情况下加快此过程?

javascript minify node.js uglifyjs

8
推荐指数
2
解决办法
8887
查看次数

Uglify JS意外的令牌运算符<< - >>,期望的punc <<:>>

当我尝试在下面的线条中使用Grunt uglify js进行uglify和concat时,

余烬数据:'余烬'

丑化失败.如何让uglifyjs跳过检查<< - >>?

grunt配置:

module.exports = function(grunt){
grunt.initConfig({
    pkg : grunt.file.readJSON('package.json'),
    concat : {
        options : {
            seperator :  ';'
        },
        dist : {
            src : ['js/*.js'],
            dest : 'output.min.js'
        }
    },
    uglify : {
        options : {
            banner : '/*! <%=grunt.template.today("dd-mm-yyyy")%> */\n'
        },
        dist : {
            files : {
                'dist/output.min.js' : ['<%= concat.dist.dest%>']
            }
        }
    },


});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-concat');

grunt.registerTask('default', ['concat', 'uglify']);
Run Code Online (Sandbox Code Playgroud)

}

我的config.js是

require.config({
baseUrl: 'js',
shim: {
    ember: {
        deps: ['handlebars', 'jquery'],
        exports: …
Run Code Online (Sandbox Code Playgroud)

uglifyjs gruntjs

8
推荐指数
1
解决办法
2万
查看次数

我可以指示Grunt连接index.html中定义的所有JS文件吗?

  1. 我是否可以指示Grunt连接index.html中定义的所有JS文件而不专门命名它们?
  2. Grunt也可以创建新的index.html文件来加载连接的JS文件而不是之前的多个文件吗?
  3. Grunt可以同时uglify JS文件吗?
  4. Grunt不仅可以为JS文件执行此操作,还可以在给定的html文件中使用CSS文件吗?

我花了很多时间谷歌搜索,但Grunt生态系统似乎是如此分散,我不熟悉:(.

PS:我已决定使用Grunt,因为在WebStorm 8中有直接集成,但也许其他工具更适合这项任务?

uglifyjs bundling-and-minification gruntjs

8
推荐指数
1
解决办法
2264
查看次数

运行一个节点应用程序脚本后批处理文件退出

我需要用Node运行几个UglifyJS2脚本.我已经将我想要运行的命令添加到bat文件中,它运行正常.

当我添加第二个命令,如"cd .."时,命令不会执行!很混乱.

cd go somewhere
uglifyjs ..\somescript -o ..\somefile.min.js --source-map ..\somemap.js.map --screw-ie8 
cd ..
Run Code Online (Sandbox Code Playgroud)

我希望能够从同一个bat文件中运行几个不同的脚本.

uglifyjs ..\somescript1 -o ..\somefile1.min.js
uglifyjs ..\somescript2 -o ..\somefile2.min.js
uglifyjs ..\somescript3 -o ..\somefile3.min.js
Run Code Online (Sandbox Code Playgroud)

我不确定这是Node,Uglify或预期行为中的问题.

windows batch-file node.js uglifyjs uglifyjs2

8
推荐指数
1
解决办法
1333
查看次数

UglifyJS财产损失

根据文档,UglifyJS可以破坏所有属性名称,除了提供的保留列表上的属性名称.是否可以通过其他方式执行此操作,因此只提供列表中的属性?

如果是这样,我需要传递给哪些选项uglify.minify(files, { ... })

javascript node.js uglifyjs uglifyjs2

8
推荐指数
1
解决办法
2179
查看次数

UglifyJS - 转换文件夹中的所有.js

我想知道是否有人可以提供帮助,我正在尝试完成我的构建过程,目前使用babel转换es6> es5,在完成之后我想使用uglifyJS以仅使用NPM脚本递归缩小所有.js文件(否)请咕噜咕噜地喝.

我想要的;

  • 将文件夹中的所有.js转换为es5
  • 使用uglify缩小给定文件夹中的所有.js文件
  • 创建源地图
  • 复制到新文件夹

我目前的设置;

  • 将所有.js转换为es5
  • 缩小所有es5 .js文件(但是没有创建源图,也将es5 js文件替换为不支持移动到另一个文件夹)

我试过了:https://www.npmjs.com/package/recursive-uglifyjshttps://www.npmjs.com/package/uglifyjs-folder但是这些似乎都无法执行我需要的构建步骤

这是我的package.json脚本部分

   "babel": "babel js_uncompiled --out-dir js_uncompiled/es5 --source-maps  && npm run npm:uglify",
    "build": "npm run babel",
    "uglify": "recursive-uglifyjs js_uncompiled/es5"
Run Code Online (Sandbox Code Playgroud)

你可以在这里找到我的完整package.json的链接:http://pastebin.com/4UHZ1SGM

谢谢

javascript node.js npm uglifyjs web

8
推荐指数
1
解决办法
1339
查看次数

树摇不工作 - webpack 4和uglifyjs-webpack-plugin

我已经尝试将UglifyJSPlugin添加到webpack 4项目中,根据webpack文档,我仍然看到我的包中的死代码甚至注释导致我认为我的uglify插件配置没有被使用.

链接到项目

文件指出,"为了充分利用树摇,你必须...
-使用ES2015模块语法(即进口和出口).
-添加一个'副作用’进入到项目的文件的package.json.完成.
-包括支持死代码删除的缩小器(例如UglifyJSPlugin)." DONE

仍然,未使用/未导入的左键盘功能和注释包含在我的包中.

所有的配置都可以在这里看到.根据我看到的结果,我怀疑这与我的webpack配置中的uglify 设置有关.

要重现,请拉回购并运行yarn build

uglifyjs webpack tree-shaking

8
推荐指数
1
解决办法
1072
查看次数

babel-minify vs terser(代替uglify-js)

我对ES6 +相对较新(称为现代JavaScript),但似乎如果要在浏览器中使用它,则需要babel- minifyterser。(首先我以为Babili是另一位玩家,但这只是Babel-Minify 的旧名字

关于用于浏览器的polyfill,可以使用生产就绪的解决方案,例如@ babel / polyfillPolyfill.io,通过它们,可以将较小的+更快的代码发送给现代浏览器,因为它们不需要/很少需要polyfill(快速测试浏览器,加载动态所需的polyfill,然后启动我们应用的主脚本)。因此,使用这些现代技术似乎绝对合理。

这是我选择babel-minify或的困境terser

该团队的WebPack 决定开关,以terser在即将举行的WebPack 5
的巴贝尔队取得了比较表显示terser在速度上要好得多。
文档terseruglify-es以前被广泛使用的一个分支。

这些使我认为我必须选择terser

但是另一方面,转换仍然需要Babel(并且Babel可以用于许多有用的东西)。他们在业务很久以前(虽然Babili/babel-minify首次发布于2016年8月26日,所以uglify是老年人)。他们在GitHub上有一个很棒的开发人员社区,可能早已发现并修复了错误。基于这些,我对生产安全输出感到更加信任。但是我还没有找到任何有关babel-minifyover 的专业文章terser

问题:

我会选择,terser因为它看起来很有希望,并且上面已经说明了原因,但是:

  • 什么情况下我应该babel-minify用完terser
  • 使用Babel软件包进行所有操作是否具有任何优势?

javascript uglifyjs webpack babeljs babel-polyfill

8
推荐指数
1
解决办法
3731
查看次数

使用uglifyjs对嵌套的类和变量进行管理

我使用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破坏根命名空间中的嵌套名称?

javascript minify uglifyjs uglifyjs2

7
推荐指数
2
解决办法
6077
查看次数

使用 UglifyJS2 和 gulp 插件时保留许可证注释

在这个项目中,我使用gulp-uglify版本 3.0.1,我想在输出中保留包含许可证文本的注释。

在项目页面上指出

Most of the minify options from the UglifyJS API are supported.
Run Code Online (Sandbox Code Playgroud)

这个答案展示了如何将minify 选项传递给插件。

UglifyJS 自述文件中指出,为了保留许可证文本

You can pass --comments to retain certain comments in the output. By default it will keep JSDoc-style comments that contain "@preserve", "@license" or "@cc_on" (conditional compilation for IE)
Run Code Online (Sandbox Code Playgroud)

所以我尝试了:

.pipe(uglify({
    mangle: true,
    output: {
        beautify: true,
        comments: "all"
    }
}))
Run Code Online (Sandbox Code Playgroud)

但由于即使指定也"all"不会产生任何许可证归属注释,我假设 minify 选项的comments行为与命令行参数不同--comments

我也尝试了这里的preserveComments发现,但只会生成:

[13:37:42] …
Run Code Online (Sandbox Code Playgroud)

uglifyjs uglifyjs2 gulp webpack gulp-uglify

7
推荐指数
1
解决办法
1616
查看次数