我正在检查是否可以分发node.js
应用程序封闭源代码。不是客户端JavaScript文件,而是服务器端文件作为商业产品。我认为代码混淆/丑化不会提供真正的隐私。也许像打包/编译源代码到二进制文件可以帮助。这可能吗?node.js代码保护
11
A
回答
5
我做了一些关于NodeJS和v8代码的搜索。
首先对存储库的NodeJS我发现,其中源代码首先被装载上的src/node.cc执行,线1128:
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)
哪个首先编译串,(后来执行),采用:
Local<v8::Script> script = v8::Script::Compile(source, filename);
以看看V8源代码在DEPS/V8 /包含/ v8.h,线639,编译函数返回:
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类,它预编译脚本以使编译速度更快,并且可以与Script类一起使用,但Script类仍需要加载脚本时的原始来源。 (也许在打印错误时,它知道错误的来源。)
总之,我认为没有太多的工作是不可能的。
2
有一个很好的方法可以尝试 - 重新编译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,并加密你的代码,并重新命名xxx.js你的代码文件扩展名xxx.jse。
2
相关问题
- 1. Node.js服务器端代码保护
- 2. 源代码保护
- 3. 保护Ruby代码
- 4. 保护PHP代码
- 5. 保护Ruby代码
- 6. PHP - 保护代码
- 7. Node.js/Express密码保护页面
- 8. 如何保护源代码?
- 9. 保护我的代码?
- 10. 保护Android源代码
- 11. 保护DLL的源代码
- 12. 保护android源代码
- 13. 保护PHP MySQL代码
- 14. PHP代码保护库
- 15. 了解保护Firebase代码
- 16. 保护源代码段
- 17. 如何保护Javascript代码?
- 18. 保护AngularJS源代码
- 19. 密码保护的SAS代码
- 20. 密码保护
- 21. 如何保护x ++源代码
- 22. 保护脚本语言源代码
- 23. JavaScript中的安全/保护代码
- 24. jxcore无法保护源代码
- 25. Google Native Client - 如何保护源代码?
- 26. 如何保护我们的代码?
- 27. 如何保护批源代码?
- 28. 如何保护修改的C#代码
- 29. silverlight代码是否需要保护?
- 30. 加载代码保护组件(.NET)
node.js很难与v8耦合。这意味着您需要在运行时使用v8来解释您的源代码。我认为不可能做闭源。 – Raynos
Raynos是正确的,并且由于编译开销,这会降低应用程序的速度。 – alessioalex
是的,看看[这里](http://stackoverflow.com/a/12640211/304141)预编译你的代码的方法。 –