node.js代码保护

我正在检查是否有可能分发一个node.js应用程序closures源。 不是客户端JavaScript文件,而是服务器端文件作为商业产品。 我想代码混淆/ uglification不会提供真正的隐私。 也许像打包/编译源代码到二进制可以帮助。 这可能吗?

我做了一些关于NodeJS和v8代码的search。

首先在NodeJS资源库上,我发现源代码首先加载在src / node.cc行1128上执行:

 Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename) 

首先编译string,(以后执行),使用:

 Local<v8::Script> script = v8::Script::Compile(source, filename); 

看看deps / v8 / include / v8.h,第639行的v8源代码,Compile函数返回:

 Compiled script object, bound to the context that was active when this function was called. When run it will always use this context. 

我不确定脚本绑定到上下文所暗示的是什么,但是我认为它不仅仅是一个二进制对象,您可以保存并传输到另一台机器,而无需传输整个上下文。

编辑:进一步看看v8.h,还有一个ScriptData类,它预编译脚本,使编译速度更快,并可以使用脚本类,但脚本类仍然需要原始源时加载脚本。 (也许在打印错误时,它知道错误的来源。)

总之,我觉得没有太多的工作是不可能的。

有一个很好的方法可以尝试 – 重新编译NodeJS源代码。

打开nodejs src文件夹(nodejs-v0.xxx/lib/module.js),你会发现:

 // Native extension for .js Module._extensions['.js'] = function(module, filename) { var content = NativeModule.require('fs').readFileSync(filename, 'utf8'); module._compile(stripBOM(content), filename); }; 

添加新的扩展以满足您的需求。 例如:

 // Native extension for .jse (encrypted js) Module._extensions['.jse'] = function (module, filename) { var content = stripBOM(NativeModule.require('fs').readFileSync(filename, 'utf8')).split('').reverse().join(''); module._compile(content, filename); }; 

然后重新编译nodejs,然后encryption您的代码,并将您的代码文件扩展名从xxx.js重命名为xxx.jse。

已知V8在内部编译JavaScript并执行它。 EncloseJS使用这个特性来编译node.js项目的可执行文件。 EncloseJS是node / io.js的一个编译器 – 它为您提供与传统编译器相同的隐私。