- 版本:0.2.5
- GitHub: https://github.com/NativeScript/nativescript-hook
- NPM: https://npmjs.net.cn/package/nativescript-hook
- 下载
- 昨天: 0
- 上周: 0
- 上个月: 0
native-script钩子
此模块为使用 tns install <module>
命令时安装钩子到 NativeScript 项目提供了更简单的方法。项目钩子是一种脚本,配置为在 NativeScript CLI 执行某些操作时执行。
钩子将放入项目的 hooks/
文件夹中。例如,当执行 tns prepare ...
时,hooks/before-prepare/
和 hooks/after-prepare/
文件夹中的所有脚本文件也将执行。
此模块简化了将脚本安装到正确项目文件夹的过程。
如何使用
描述钩子
首先,将钩子的描述添加到模块的 package.json
文件中。以下是一个示例
{
"nativescript": {
"hooks": [
{
"type": "before-prepare",
"script": "lib/before-prepare.js"
}
]
},
}
上述指定当执行 tns prepare ...
命令时,应执行脚本 lib/before-prepare.js
。 "type"
属性指定要安装的钩子类型。 "script"
属性指定要执行的脚本的路径。您可以通过扩展 "hooks"
数组来添加更多钩子。
安装钩子
如果您还没有做,请向您的 package.json
中添加一个 post-install 和 pre-uninstall 脚本
"scripts": {
...
"postinstall": "node postinstall.js",
"preuninstall": "node preuninstall.js"
},
post-install 脚本(示例中的 postinstall.js
)应包含以下行
require('nativescript-hook')(__dirname).postinstall();
pre-uninstall 脚本(示例中的 preuninstall.js
)应包含以下行
require('nativescript-hook')(__dirname).preuninstall();
这两个钩子将负责在您的模块安装或卸载时安装和删除 NativeScript 项目的钩子。
tns install <module>
安装钩子的 NativeScript 模块旨在使用 tns install <module>
命令进行安装,而不是直接通过 npm。在模块安装过程中,NativeScript CLI 向 post-install 脚本提供信息,说明在哪里放置钩子。当通过 tns install <module>
安装时,以下环境变量被定义
TNS_HOOKS_DIR
- 钩子应安装的目录。它可能存在也可能不存在。TNS_PROJECT_DIR
- 当前项目目录。
通过这种方式安装的模块可以通过运行 npm rm --save-dev
简单卸载。
进程中的钩子
默认情况下,钩子在子进程中执行,子进程死亡后继续执行。这为您编写钩子提供了灵活性,但无法使用 CLI 的任何服务。
为此,进程中的钩子允许您以可以使用从注入器获取的任何服务的这种方式执行您的钩子。进程中的钩子仅适用于 JavaScript 钩子。要启用进程执行,您只需在钩子中有一个 module.exports = ...
语句。例如,如果钩子脚本为
module.exports = function($logger) {
};
那么,钩子脚本将被 CLI 需要,并通过注入器调用导出的函数。
钩子可以接受一个名为 hookArgs
的特殊注入参数
module.exports = function(hookArgs) {
};
hookArgs
是一个包含传递给钩子方法的全部参数的哈希表。例如,prepare
钩子由 CLI 方法 preparePlatform(platform: string)
激活。在这里,钩子将获取 platform
参数的值,存储在 hookArgs.platform
属性中。
如果在您的钩子中执行异步代码,您需要返回一个 promise,否则您的钩子在完成之前执行将继续。
var mkdirp = require('mkdirp');
module.exports = function($logger) {
return new Promise(function(resolve, reject) {
mkdirp('somedir', function(err) {
if (err) {
reject(err);
else {
resolve();
}
})
});
}
最后,通过此模块安装进程钩子时,您需要明确指定,在 package.json
中的脚本描述符的 inject
属性中指定。
{
"nativescript": {
"hooks": [
{
"type": "after-prepare",
"script": "lib/after-prepare.js",
"inject": true
}
]
},
}
您可以在 package.json
中为您的钩子定义一个自定义名称,此属性是可选的,默认值为插件包名。
{
"nativescript": {
"hooks": [
{
"type": "after-prepare",
"script": "lib/after-prepare.js",
"name": "my-custom-hook"
}
]
},
}