我寻求一种简单的方法来使用nexe工具保护sail.js app(0.12)的代码。到目前为止,我能够将sailsjs配置文件的内容包含到nexe.js中。但是我没有找到将sails.js的控制器,模型和钩子包含到bundle中的简单解决方案。
也许有人有nodejs + sailsjs + nexe的经验,或者可以提供有关正确使用marlinespike模块的更多详细信息。
答案 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服务器)。
按指定的路由访问服务器。