创建一个可安装的钩子

可安装的钩子也就是自定义的Sails钩子,存在于一个应用中的node_modules文件夹。当你想要在Sails app之间共享功能或者发布你的钩子到NPM上与Sails社区共享的时候特别有用。如果你只是想要创建一个钩子在一个Sails app中使用的话,请参考creating a project hook

为了创建一个可安装的钩子:

  1. 选择一个你的新钩子的名字。它不能与任何的内核钩子名字相冲突。
  2. 在你的系统上新建一个名字为sails-hook-<your hook name>的新文件夹。sails-hook-前缀是可选的但还是建议你保持一致性。当钩子被加载的时候前缀会自动被Sails截掉。
  3. 在文件夹中创建一个package.json文件。如果你在你的系统中已经安装了npm,那么你可以通过运行npm init来简单地生成这个文件并允许一些选项配置。否则,你得手工创建然后确保它至少包含了下面的信息:
    {
     "name": "sails-hook-your-hook-name",
     "version": "0.0.0",
     "description": "a brief description of your hook",
     "main": "index.js",
     "sails": {
       "isHook": true
     }
    }
    
    如果你使用npm init去创建你的package.json,请打开该文件之后手动地加入sails关键词并包含isHook:true的内容。
  4. index.js中根据hook的技术规范写你的钩子代码。

Your new folder may contain other files as well, which can be loaded in your hook via require; only index.js will be read automatically by Sails. Use the dependencies key of your package.json to refer to any dependencies that need to be installed in order for your hook to work (you may also use npm install --save to easily save dependency information to package.json).

为你的钩子指定内部Sails使用的名称(进阶)

在某些例子中,尤其当使用一个scoped NPM package去重写一个内核钩子的时候,你会想要改变Sails内部使用的名称当它加载你的钩子的时候。你可以在你的package.json文件中使用sails.hookName配置选项。这个值应该是你想要加载进sails.hooks目录的钩子名称,所以你一般不会想要一个sails-hooks-的前缀。比如,如果你有一个@mycoolhooks/sails-hook-sockets的模块,你想要使用它去重写内核sails-hook-sockets模块,那么package.json应该是这样:

{
    "name": "@mycoolhooks/sails-hook-sockets",
    "version": "0.0.0",
    "description": "my own sockets hook",
    "main": "index.js",
    "sails": {
      "isHook": true,
      "hookName": "sockets"
    }
}

测试你的新钩子

在你分发你的可安装钩子给别人之前,你想要写一些测试来测试钩子。这个测试可以帮助你确保你的钩子与未来的Sails版本兼容并且有效地减少拉扯和破坏附近的对象。写出一份完整的测试指导超出了本文档的范围,但是下面介绍的步骤还是可以帮助你简单地写出一个测试的:

  1. 在你的钩子的package.json问文件中添加Sails为一个devDependency

    "devDependencies": {
       "sails": "~0.11.0"
    }
    
  2. 使用npm install sails或者npm link sails(如果你已经全局地安装了Sails在你的系统中的话)安装你的钩子的依赖软件Sails。

  3. 使用npm install -g mocha安装Mocha到你的系统中如果没有的话
  4. 在你的钩子的主文件夹下添加一个test文件夹
  5. 添加一个basic.file文件并带有下面的基本测试:

    var Sails = require('sails').Sails;
    
    describe('Basic tests ::', function() {
    
         // Var to hold a running sails app instance
     var sails;
    
         // Before running any tests, attempt to lift Sails
     before(function (done) {
    
       // Hook will timeout in 10 seconds
       this.timeout(11000);
    
       // Attempt to lift sails
         Sails().lift({
           hooks: {
             // Load the hook
             "your-hook-name": require('../'),
             // Skip grunt (unless your hook uses it)
             "grunt": false
           },
           log: {level: "error"}
         },function (err, _sails) {
           if (err) return done(err);
           sails = _sails;
           return done();
         });
     });
    
         // After tests are complete, lower Sails
     after(function (done) {
    
       // Lower Sails (if it successfully lifted)
       if (sails) {
         return sails.lower(done);
       }
       // Otherwise just return
       return done();
     });
    
     // Test that Sails can lift with the hook in place
     it ('sails does not crash', function() {
       return true;
     });
    
    });
    
  6. 使用mocha -R spec运行测试并查看完整的结果

  7. 完整资料请参考Mocha文档。

发布你的新钩子

假设你的钩子测试通过,并且假设你的钩子名字没有被其他的NPM模块使用,那么你就可以通过运行npm publish发布到社区与全世界共享你的模块。

results matching ""

    No results matching ""