使用Requirejs优化器美化一个JS文件

Uglify one JS file using requirejs optimizer(使用Requirejs优化器美化一个JS文件)
本文介绍了使用Requirejs优化器美化一个JS文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有办法使用我的计算机上已经安装的r.js(RequireJS Optimizer)将命令行中的一个文件丑化。 就像我们可以使用node r.js cssIn="" out="".缩小CSS文件一样

我实际上是在一台没有互联网连接的计算机上工作,我无法在上面安装其他东西(特别是使用NPM) 也许可以从另一台计算机下载一个uglifyjs包,包括准备安装在我的计算机上的所有依赖项?不过,我没有找到这样的东西.

谢谢

推荐答案

从另一台计算机复制文件

既然您在问题中提到这是一种可能性,我将对此进行讨论。

第一种方法

  1. 在具有uglify-js的计算机上。查找uglify-js的安装位置。存档该目录及其子目录。

  2. 在断开的计算机上。将该目录解压到项目的node_modules子目录中。假设项目在/home/johndoe/foo中。我想在/home/johndoe/foo/node_modules中解压缩它。

  3. 您可以在node_modules/uglify-js/bin/uglify-js使用uglify-js

第一个方法是我要使用的方法。

第二种方法

如果第一种方法不知何故对您不起作用或不能很好地起作用,还有第二种方法。事实是,复制已安装的节点软件包并不能完美地复制安装过程。在5月份的情况下,它可能会完美地工作,但在某些情况下,它可能不会。因此,这里有一种方法可以使npm完成整个安装过程。

  1. 在安装了uglify的计算机上,执行以下操作:

    $ npm ls
    

    在输出中,分层查找uglify-js和内的所有包。输出将如下所示:

    ├── cookie@0.1.0
    ├─┬ uglify-js@2.4.12
    │ ├── async@0.2.10
    │ ├─┬ optimist@0.3.7
    │ │ └── wordwrap@0.0.2
    │ ├─┬ source-map@0.1.31
    │ │ └── amdefine@0.1.0
    │ └── uglify-to-browserify@1.0.2
    └── yaml@0.2.3
    
    在上面的输出中,您最关心的是uglify-js,包括uglify-to-browserify。对于这些包中的每一个,查看NPM的缓存中的压缩包文件。在Linux和类似系统上,这将位于~/.npm/中。例如,在我的机器上uglify-js缓存在~/.npm/uglify-js/2.4.12/package.tgz。将这些软件包复制到您可以带到断开连接的计算机的介质上。请确保复制正确的版本。它们列在上面列表中的@符号之后。

  2. 将媒体移动到断开的计算机。

  3. 对于每个软件包,使用以下命令安装:

    $ npm install [path to the tgz file]
    

    tgz传递给npm时,只要满足所有依赖项,它就会忽略网络。这里的秩序很重要。您希望从本身没有依赖项的包开始。我相信npm ls生成它的列表的方式是,如果您只是按相反的顺序进行,您就不会有问题。因此:

    • 修改
    • 源映射
    • Wordrap
    • 乐观主义者
    • 异步
    • uglify-js
    在此过程结束时,uglifyjs命令将位于node_modules/.bin/uglifyjs中。您可以很容易地针对uglifyjs自己的文件之一测试它。例如:

    $ node_modules/.bin/uglifyjs node_modules/uglify-js/lib/output.js
    

我尝试了其他几种方法,但发现npm非常渴望到网络上查找包。人们很容易想到"也许ABC会行得通……"发现没有,因为即使所有内容都在本地可用,npm仍然需要网络连接。

使用r.js

中包含的uglify-js r.js优化器在其中包含suglify-js。不幸的是,它没有打包成可以在r.js之外平凡地使用。但是,您可以这样访问它:

var r = require("./node_modules/.bin/r.js");
var fs = require("fs");

var config = {};

var fileContents = fs.readFileSync(process.argv[2]).toString();

r.tools.useLib("mine", function (require) {
    require(["uglifyjs/index"], function (uglify) {
        var parser = uglify.parser;
        var processor = uglify.uglify;

        var ast = parser.parse(fileContents, config.strict_semicolons);
        if (config.no_mangle !== true) {
            ast = processor.ast_mangle(ast, config);
        }
        ast = processor.ast_squeeze(ast, config);

        fileContents = processor.gen_code(ast, config);

        if (config.max_line_length) {
            fileContents = processor.split_lines(fileContents,
                                                 config.max_line_length);
        }

        //Add trailing semicolon to match uglifyjs command line version
        fileContents += ';';

        fs.writeFileSync(process.argv[3], fileContents);
    });
});
如果将上述代码保存在名为script.js的文件中,并像这样调用node script.js input output,它将使input丑化,并将结果放入output。关键是使用r.js导出的tools.useLib方法。这允许访问r.js包含的库。代码的睡觉大部分是从r.js中进行丑化的部分复制过来的。

在命令行使用r.js

$ r.js -o name=main exclude=main out=built.js
这将仅优化模块main(在文件main.js中),并将输出放入build.js。它不会遵循main的任何依赖项。但是,它通过添加模块名称作为第一个参数来修改define。可以使用sedawkperl等后处理步骤将其删除。

如果要丑化的文件将被填充以用于RequireJS(不是实际的AMD样式模块),则不希望使用exclude参数:

$ r.js -o name=shimmed out=built.js

与上面的第一个命令一样,这也不仅仅是使文件变得难看。它在末尾添加一个define调用。同样,可以使用sed或类似的工具将其取出。

(我绝对可以在没有baseUrl=.的情况下使用这些命令。但是,根据您的具体操作,r.js可能会抱怨。因此,您可能需要将baseUrl=.添加到命令行。)

这篇关于使用Requirejs优化器美化一个JS文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)