在Node.js中将SweetJS编译为string

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

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

我怎么能做到这一点从一个Node.js模块内部,而不是输出到指定的文件,我得到的编译输出为string?

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

它没有logging,因为它会被更改/删除sweet.js得到很好的模块支持(使用ES6 import s而不是命令行标志)。 但对于0.4.0,您可以使用以下API从npm模块加载macros:

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

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

如果你只是想把一个string编译成一个模块,你可以使用sweet.loadModule(<contents>)

再一次,这个API只是一个暂时的缺口,将在不久的将来被删除。

编辑:更正了compile API