インストール可能なフックは、アプリケーションのnode_modules
フォルダに存在するカスタムSailsフックです。Sailsアプリケーション間で機能を共有する場合、またはNPMにフックを公開してSailsコミュニティと共有する場合に役立ちます。単一のSailsアプリケーションでのみ使用するフックを作成する場合は、代わりにプロジェクトフックの作成を参照してください。
新しいインストール可能なフックを作成するには
sails-hook-
という名前の新しいフォルダを作成します。sails-hook-
プレフィックスはオプションですが、一貫性のために推奨されます。フックがロードされるとSailsによって削除されます。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
を作成する場合は、後でファイルを開いてisHook: true
を含むsails
キーを手動で挿入してください。index.js
にフックコードを記述します。新しいフォルダには他のファイルも含まれている可能性があり、それらはrequire
を使用してフック内でロードできます。index.js
のみがSailsによって自動的に読み取られます。フックを動作させるためにインストールする必要がある依存関係を参照するには、package.json
のdependencies
キーを使用します(npm install
を使用して、依存関係情報をpackage.json
に簡単に保存することもできます)。
特に、コアSailsフックをオーバーライドするためにスコープ付きNPMパッケージを使用する場合、フックのロード時にSailsが内部的に使用する名前を変更したい場合があります。これには、package.json
ファイルでsails.hookName
構成オプションを使用できます。値は、sails.hooks
辞書にロードする必要がある名前であるため、一般的にsails-hooks-
プレフィックスは必要ありません。たとえば、コアsails-hook-sockets
モジュールをオーバーライドするために使用するモジュール@mycoolhooks/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バージョンとの互換性が確保され、怒りの発作による髪の毛の抜けることや周辺物の破壊が大幅に減少します。テストの完全なガイドは、このドキュメントの範囲外ですが、次の手順に従うと開始するのに役立ちます。
package.json
ファイルにSailsをdevDependency
として追加します。"devDependencies": {
"sails": "~0.11.0"
}
npm install sails
またはnpm link sails
(システムにSailsがグローバルにインストールされている場合)を使用して、フックの依存関係としてSailsをインストールします。npm install -g mocha
を使用して、システムにMochaをインストールします。test
フォルダを追加します。次の基本テストを含むbasic.js
ファイルを追加します。
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;
});
});
mocha -R spec
を実行して、完全な結果を確認します。フックがテストされ、問題ない場合、またフック名が別のNPMモジュールによって既に使用されていない場合は、npm publish
を実行して世界と共有できます。おめでとうございます!