1

在 shell 中,我可以调用 Sweet.js 编译器。

sjs -m macro-providing-module -o output-directory/file.js input-directory/file.sjs

如何从 Node.js 模块内部执行相同操作,而不是输出到指定文件,而是将编译后的输出作为字符串获取?

var sweetjs = require('sweet.js');
var input = require('fs').readSync('input-directory/file.sjs');
var module = 'macro-providing-module';

var output = sweetjs(/* ??? */);
4

1 回答 1

2

它没有记录,因为当 sweet.js 获得良好的模块支持(使用 ES6import而不是命令行标志)时,它将被更改/删除。但对于 0.4.0,您可以使用以下 API 从 npm 模块加载宏:

var sweet = require('sweet.js');
var mod = sweet.loadNodeModule(root, modulePath);
var out = sweet.compile(<contents>, {
    modules: [mod]
});

root参数是文件系统上开始查找节点模块的位置。通常这是process.cwd()如果您正在制作命令行工具或其他东西。compile接受一个选项对象,您可以在其中提供一个 s 数组module

如果您只想将字符串编译为模块,则可以使用sweet.loadModule(<contents>).

同样,此 API 只是一个权宜之计,将在不久的将来删除。

编辑:更正了compileAPI

于 2014-01-11T13:40:16.097 回答