npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

digo-uglify-js

v0.1.1

Published

digo 插件:使用 UglifyJS 混淆、压缩或格式化 JS

Downloads

10

Readme

digo-uglify-js

digo 插件:使用 UglifyJS 混淆、压缩或格式化 JS。

安装

npm install digo-uglify-js -g

使用

压缩 JS

digo.src("*.js", "!*.min.js").pipe("digo-uglify-js");

JS 语法检查

digo.src("*.js").pipe("digo-uglify-js", {
	compress: false
});

格式化 JS

digo.src("*.js").pipe("digo-uglify-js", {
	compress: false,
	output: {
		beautify: true
	}
});

源映射(Source Map)

本插件支持生成源映射,详见 源映射

用法

digo.src("*.js").pipe("digo-uglify-js", {
    warnings: false,            // 是否输出警告(如删除无用代码时会产生警告)。
    parse: {
        strict: false,          // 是否启用 JS 严格模式。
        toplevel: null,         // 顶层语法树节点。
        filename: null,         // 源文件名,主要用于报错。*
    },
    mangle: {                   // 是否混淆变量名。true 表示全部混淆;false 表示全部不混淆。
        except: null,           // 禁止混淆的变量名数组。如 ['$']。
        keep_fnames: false,     // 是否保留函数名。如果设为 false,可能会导致依赖 Function.prototype.name 的代码出错。
        toplevel: false,        // 是否混淆全局变量名。
        eval: false,            // 是否混淆 eval 和 with 可能用到的变量名。
    },
    mangleProperties: false/* { // 是否混淆属性名。true 表示全部混淆;false 表示全部不混淆。
        regex: null,            // 正则表达式。如果匹配属性名则混淆。
        ignore_quoted: false,   // 是否忽略引号形式的属性调用。
    }*/,
    compress: {                 // 是否压缩代码。false 表示全部不压缩。
        drop_console: true,     // 是否删除 console.log 等调用。*
        drop_debugger: true,    // 是否删除 debugger 语句。*
        dead_code: true,        // 是否删除永远无法执行的代码。如 if(false) { }。*
        global_defs: {          // 预设全局常量。*
            DEBUG: false,
            RELEASE: true
        },
        unsafe: false,          // 是否允许不安全的深度压缩。如 new Object() → {}。详见 https://github.com/mishoo/UglifyJS2#the-unsafe-option。
        sequences: true,        // 是否将连续语句转为逗号表达式。如 a = 1; return b; → return a=1, b; 。
        properties: true,       // 是否将常量属性名转为调用表达式。如 a["foo"] → a.foo。
        comparisons: true,      // 是否优化比较运算。如 !(a <= b) → a > b (仅当 unsafe 为 true 时优化)和 a = !b && !c && !d && !e → a=!(b||c||d||e)。
        unsafe_comps: false,    // 是否将 < 和 <= 分别转为 > 和 >= 来改进比较性能。设为 true 可能导致对象比较时出错。仅当 comparisons 为 true 时生效。
        conditionals: true,     // 是否优化常量条件表达式,如 true ? a : b。
        evaluate: true,         // 是否尝试执行常量表达式。详见 https://github.com/mishoo/UglifyJS2#conditional-compilation。
        booleans: true,         // 是否优化布尔运算。如 !!a ? b : c → a ? b : c。
        loops: true,            // 是否优化常量循环。如 while(true) → while(1)
        unused: true,           // 是否删除未引用的局部变量和函数。
        hoist_funs: true,       // 是否置顶函数声明。
        hoist_vars: false,      // 是否置顶变量声明。如果为 true 可能导致代码量增加。
        if_return: true,        // 是否优化 return/continue 语句后的 if 语句。 
        join_vars: true,        // 是否合并多个 var 语句。
        cascade: true,          // 是否尝试简化逗号表达式。如 x = something(), x → x = something()。
        collapse_vars: false,   // 是否内联只用到一次的变量和常量。
        reduce_vars: false,     // 是否内联只赋值一次(类似常量)的变量。
        warnings: false,        // 是否压缩删除代码时是否输出警告。
        negate_iife: false,     // 是否将未使用返回值的立即执行的函数表达式改为 ! 表达式。如 (function(){})() → !function(){}()。
        pure_getters: false,    // 是否将所有属性和字段都作为无副作用的调用处理。
        pure_funcs: null,       // 无副作用的函数全称数组。如 ["Math.floor"],
        side_effects: true,     // 是否删除无副作用的函数调用。如 console.log() 删除后不会影响其它逻辑。
        keep_fargs: true,       // 是否保留未使用的函数参数。如果设为 false,可能会导致依赖 Function.prototype.length 的代码出错。
        keep_fnames: false,     // 是否保留函数名。如果设为 false,可能会导致依赖 Function.prototype.name 的代码出错。
		screw_ie8: false,		// 是否删除 IE8 兼容代码。
        passes: 1,              // 执行压缩的次数。
    },
    output: {
        beautify: false,        // 是否格式化代码。
        indent_level: 4,        // 缩进空格数。仅当 beautify 为 true 时有效。
        indent_start: 0,        // 首行的缩进空格数。仅当 beautify 为 true 时有效。
        width: 80,              // 允许最大列数。仅当 beautify 为 true 时有效。
        quote_keys: false,      // 是否使用引号定义 JSON 对象的键。
        quote_style: 0,         // 引号风格。0:优先使用双引号。1:全部使用单引号。2:全部使用双引号。3:保留原引号。
        keep_quoted_props: false, // 是否保留对象字面量中的引号。
        space_colon: true,      // 是否在冒号后添加一个空格。
        ascii_only: false,      // 是否编码特殊 Unicode 字符。
        inline_script: false,   // 是否编码 "</script"。
        max_line_len: 32000,    // 允许最大行号。仅当 compress 不是 false 时有效。
        screw_ie8: false,       // 是否删除 IE8 兼容代码。
        bracketize: false,      // 是否强制为嵌套语句添加花括号。
        preamble: null,         // 在最终生成的源码前追加的文本。如包含版权声明的注释。
        comments: /^!|@preserve|@license|@cc_on/i,  // 是否保留注释。true:保留所有注释;false: 删除所有注释;正则表达式:如果匹配则保留;函数:自定义保留逻辑*
        semicolons: true,       // 是否在语句后追加分号,如果为 false 则追加换行(更具可读性;GZip 前代码可能更小;GZip 后可能更大)。
    },
    inSourceMap: null,          // 输入的源映射对象。*
    outSourceMap: false,        // 是否生成源映射。*
    toplevel: false,            // 是否处理全局变量和函数。
    ie8: true,                  // 是否兼容 IE8*
});

*: 插件内部已设置了此选项的默认值。

另参考: https://github.com/mishoo/UglifyJS2