Вот какой-то код, который я использовал в моих предыдущих проектах, может быть, полезен?
// Similar to JSON.stringify(), with three major differences:
// (1) It also wrap functions
// (2) Upon execution, it expose an object, nl, into the scope
// (3) Results are minified by 'uglify-js'
var bundle = function(obj) {
var type = typeof obj;
if(type === 'string') return '\'' + obj + '\'';
if(type === 'boolean' || type === 'number') return obj;
if(type === 'function') return obj.toString();
var ret = [];
for(var prop in obj) {
ret.push(prop + ': ' + bundle(obj[prop]));
}
return '{' + ret.join(',') + '}';
};
var ret = 'var nl = ' + bundle(nl);
ret = require('uglify-js').minify(ret, {fromString: true}).code;
fs.writeFileSync('nl.js', ret);
Одно предостережение при использовании этого заключается в том, что если функция использует что-либо во внешнем закрытии, она не будет работать, то есть: ... obj: {..., key: (function () {... var a = 10; ... return function () {... в некотором коде используется 'a' ...}) ()}