如何使用nexe创建一个独立的sails.js包?

时间:2016-11-21 11:32:38

标签: node.js sails.js

我寻求一种简单的方法来使用nexe工具保护sail.js app(0.12)的代码。到目前为止,我能够将sailsjs配置文件的内容包含到nexe.js中。但是我没有找到将sails.js的控制器,模型和钩子包含到bundle中的简单解决方案。

也许有人有nodejs + sailsjs + nexe的经验,或者可以提供有关正确使用marlinespike模块的更多详细信息。

2 个答案:

答案 0 :(得分:0)

我认为这是不可能的。 Sails做了很多fs.readFileSync,并且捆绑一切都是不可能的。更不用说整个基于grunt的构建系统了。

一个好方法是缩小每个文件(控制器,模型等)并保持相同的目录结构。请记住,风帆中的某些变量名称对最终结果也很重要,因此您应该彻底测试您的应用。

答案 1 :(得分:0)

以下方式为特定版本的Sails.js(0.12.8)提供了一个方便的解决方案:

app.js中的

1)预加载所有需要的控制器,如

 var controller_1 = require('api/controllers/DesignController.js');
var controller_n = ....

2)预加载所有配置,如

    var routes=  require('./config/routes').routes;
var blueprints =  require('./config/blueprints').blueprints;
var connections =  require('./config/connections').connections;
var cors =  require('./config/cors').cors;
var csrf =  require('./config/csrf').csrf;
var globals=  require('./config/globals').globals;
....

3)使用特殊形式的require(由nexe提供)加载并创建Sails实例:

    var incSails = 'sails';
var Sails = GLOBAL.require(incSails).constructor;
var sailsApp = new Sails();

4)用预装的配置升力帆并禁用Grunt。然后在回调力加载路线。

sailsApp.lift({"routes": routes,
            "http":http,
            "i18n":i18n,
            "local":local,
            "cors":cors,
            "csrf":csrf,
            "sockets":sockets,
            "log":log,
            "views":views,
            "session":session,
            "connections":connections,
            "blueprints":blueprints,
            "policies":policies,
            "globals": globals,
            "hooks": { "grunt": false }
}, 
function (err) {
var controllers = {"actions":{}, "Design": controller_1, .... "...":          controller_n};
var transformed = transformEntities(controllers);
sails['controllers'] = transformed;
sails.hooks.controllers.loadAndRegisterControllers(function cb() { });
sails.router.load(function cb(){ } )

}    );

5)需要一个内部函数(实际上是某个模块的克隆)

 function transformEntities(entities) {
 var res1 =  _.mapValues(entities, function (entity, key)  {
  return _.defaults(entity, {
  globalId: key,
  identity: key.toLowerCase()
 })
});
 var res2 = _.mapKeys(res1, function (entity, key)  {
 return key.toLowerCase();
 });
 return res2;
}

后续步骤

通过nexe编译应用程序。

将编译后的文件与node_modules一起复制到测试文件夹中。

启动编译文件(将启动sails服务器)。

按指定的路由访问服务器。