将npm模块编译为单个文件,没有依赖项

时间:2014-03-28 10:57:03

标签: javascript ruby node.js npm browserify

我正在尝试将uncss npm模块编译成一个适合ExecJS编译的.js文件。例如,咖啡脚本人有this。目标是为它创建一个简单的ruby包装器,类似于ruby-coffee-script

我尝试过的目标:

  1. 看到了一个暗示UglifyJS的答案。无处可去。
  2. 使用了browserify,它应该已经完成​​了这个技巧,但它无法使用以下错误消息编译lib / uncss.js:

    Error: ENOENT, open 'tls' while resolving "tls" from file /home/prajjwal/code/uncss/node_modules/request/node_modules/forever-agent/index.js
    
  3. 我想这是因为browserify没有适当的垫片吗?我也关注浏览器替换节点模块的垫片。它们完全可以安全使用吗?我将把它嵌入红宝石中。不要认为浏览器是我应该使用的。还有另外一种方法可以从npm模块生成一个独立的.js吗?

    任何帮助表示感谢。

2 个答案:

答案 0 :(得分:13)

Browserify有一个--standalone标志,可以在这里提供帮助。

在命令行上:

browserify -s moduleName --bare moduleName.js -o filename.js

在节点脚本中,您可以正常导入连接模块:

var moduleName = require('./filename');

但是,您可能仍需要忽略和/或删除任何棘手的模块。

答案 1 :(得分:0)

虽然这不是不可能,但它有点复杂,我知道没有自动完成的工具,但可以手动完成。

因此,如果您以这种方式加载模块:

var async = require('async');

您可以包含该模块的来源,首先,在主脚本中声明模块实例:

var global_async = null;

然后,在匿名函数中包含模块代码,并将“module.exports”替换为您之前声明的全局变量:

module.exports = async

global_async = async;

问题是“unss”有很多依赖关系,每个都有一些依赖关系,所以要完成很多工作,但并非不可能......但最后,这个模块还需要一些外部的像“phantomjs”这样的二进制文件。

如果你想构建一个围绕“unss”创建包装的gem,你可以检查node和uncss是否安装在任何东西之前,如果没有,安装两者,然后只需调用它们,就像用phantomjs的uncss一样。 / p>

相关问题