首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js代码保护

node.js代码保护
EN

Stack Overflow用户
提问于 2011-11-08 01:46:24
回答 3查看 7.4K关注 0票数 10

我正在检查是否有可能分发node.js应用程序的封闭源代码。不是客户端的Javascript文件,而是作为商业产品的服务器端文件。我认为代码混淆/丑化不会提供真正的隐私。也许像将源代码打包/编译成二进制文件这样的事情会有所帮助。这个是可能的吗?

EN

回答 3

Stack Overflow用户

发布于 2011-11-08 03:24:10

我对NodeJS和v8代码做了一些搜索。

首先,在NodeJS存储库中,我找到了在src/node.cc上执行1128行的第一次加载源代码的位置:

代码语言:javascript
复制
Local<Value> ExecuteString(Handle<String> source, Handle<Value> filename)

它首先使用以下命令编译字符串(然后执行):

代码语言:javascript
复制
Local<v8::Script> script = v8::Script::Compile(source, filename);

查看deps/ v8 /v8/v8.h的包含源代码,第639行,编译函数返回:

代码语言:javascript
复制
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类仍然需要原始源代码。(也许在打印错误时,它知道错误的来源。)

总而言之,我认为没有很多工作是不可能的。

票数 5
EN

Stack Overflow用户

发布于 2015-02-17 01:36:25

众所周知,V8可以在内部编译并执行JavaScript。EncloseJS使用此功能从node.js项目中生成已编译的可执行文件。EncloseJS是一个针对node/io.js的编译器--它为你提供了与传统编译器相同的私密性。

票数 3
EN

Stack Overflow用户

发布于 2012-05-22 17:08:25

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

打开nodejs src文件夹(nodejs-v0.xxx/lib/module.js),您将看到:

代码语言:javascript
复制
// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
  var content = NativeModule.require('fs').readFileSync(filename, 'utf8');
  module._compile(stripBOM(content), filename);
};

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

代码语言:javascript
复制
// 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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8040423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档