本文概述
- 1.创建一个普通模块
- 2.创建全局模块文件
- 3.公开你的模块以进行全局安装
- 4.安装模块
- 最后提示
node ../path/to/my-awesome/tool/script.js --arguments somevalue
如果你经常使用它, 会有些痛苦。相反, 你想要的是, 应用程序开发人员具有一定的权限, 独创性, 并像著名的框架和工具集(例如Cordova或TypeScript)那样公开应用程序的全局命令, 将工具名作为命令指令, 而其余命令:
cordova do-somethingREM or other toolstsc do-other-thingnodemon do-other-thing
对你自己的模块执行相同的操作会更好:
mymodule do-something
在本文中, 你将学习如何轻松地为全局安装创建合适的模块。
1.创建一个普通模块 作为第一步, 继续创建一个空模块。我们的模块名称将是custom-toolkit(根据需要更改), 位于桌面中的custom-toolkit文件夹内, 在custom-toolkit文件夹内, 创建一个新文件夹, 其中将包含名称为lib的模块代码, 最后在lib文件夹中创建一个具有以下内容的单个文件(index.js):
// ./lib/index.js/** * Displays a string in the console * * @param {string_to_say} String string to show in the console */var say = function(string_to_say) {return console.log(string_to_say);
};
// Allows us to call this function from outside of the library file.// Without this, the function would be private to this file.exports.say = say;
我们模块的主要脚本将公开say方法, 该方法在控制台中显示一些文本。你可以使用npm init创建模块(创建package.json):
文章图片
或手动创建具有以下内容的package.json(更改除主字段之外的所需字段):
{"name": "custom-toolkit", "version": "1.0.0", "description": "An awesome custom global module", "main": "./lib/index.js", "scripts": {"test": "echo \"Error: no test specified\" &
&
exit 1"}, "author": "ourcodeworld", "license": "MIT"}
对于我们的示例模块来说就足够了, 简单不是吗?该模块的结构为:
文章图片
2.创建全局模块文件 在模块的根目录内创建一个名为bin的新文件夹, 并在其中包含以下内容的新js文件(demo-global.js):
#!/usr/bin/env nodevar myLibrary = require('../lib/index.js');
// Displays the text in the consolemyLibrary.say('Jack, get back, come on before we crack Lose your blues, everybody cut footloose');
重要 请注意, 第一行(#!/ usr / bin / env节点)将允许npm为该模块正确生成可执行文件。如果有人在Windows中工作, 它将忽略shebang行#!/ usr / bin / env节点, 并将根据.js文件关联执行它。
如果打包为npm, 请使用package.json中的bin属性(这是我们将在第3步中执行的操作)。然后在Windows上, Npm将在脚本旁边安装.cmd包装器, 以便用户可以从命令行执行它
该脚本demo-global.js将是我们将在package.json上使用自定义名称在全球范围内公开的脚本。
3.公开你的模块以进行全局安装 在这种情况下, 我们希望我们的全局模块具有名称dosomethingawesome, npm使其非常容易, 要注册我们的全局模块, 我们需要在package.json中指定bin属性。请注意, 你可以执行任意数量的命令, 许多程序包都具有一个或多个可执行文件, 这些文件要安装到PATH中。
编辑package.json并注册执行demo-global.js脚本的dosomethingawesome指令:
{..."bin": {"dosomethingawesome": "./bin/demo-global.js"}, ..-}
当有人使用npm install -g yourmodule安装你的模块时, 这足以在全球范围内注册该模块。请注意, 如果你的软件包主要是应全局安装的命令行应用程序, 则可以将preferredGlobal属性添加到true, 以在安装在本地时提供警告。它实际上并不能阻止用户在本地安装它, 但是可以防止某些无法正常使用的混乱:
{..."preferGlobal": true, ..-}
然后, 你的package.json应该最终看起来像:
{"name": "custom-toolkit", "version": "1.0.0", "description": "An awesome custom global module", "main": "./lib/index.js", "scripts": {"test": "echo \"Error: no test specified\" &
&
exit 1"}, "bin": {"dosomethingawesome": "./bin/demo-global.js"}, "preferGlobal": true, "author": "ourcodeworld", "license": "MIT"}
这样就可以安装模块了。
4.安装模块 最后一步由你决定, 你只需要以所需的方式全局安装模块即可。你可以从本地安装它, 然后在Github上发布, 然后在NPM上发布。在这种情况下, 我们将从桌面上的文件夹全局安装模块, 因此我们的命令理论上是npm install -g custom-toolkit看起来像:
npm install -g C:\Users\sdkca\Desktop\custom-toolkit
请记住添加-g标志以全局安装软件包, 你就可以开始了。现在, 你的模块(公开的dosomethingawesome指令)随处可用:
文章图片
要卸载它(即使从本地安装), 请执行npm uninstall -g custom-toolkit。
最后提示 教程解释得尽可能简单。如果要增加第一个全局模块的复杂性, 那么显然可以使用自变量(CLI的常规任务)。以下修改后的脚本将接受并期望名称作为我们dosomethingawesome命令的参数:
#!/usr/bin/env node// Delete the 0 and 1 argument (node and script.js)var args = process.argv.splice(process.execArgv.length + 2);
// Retrieve the first argumentvar name = args[0];
var myLibrary = require('../lib/index.js');
// Displays the text in the consolemyLibrary.say(name + ', get back, come on before we crack Lose your blues, everybody cut footloose');
可以通过以下方式触发:
dosomethingawesome Carlos
并会生成输出:
文章图片
如果你真的想在脚本中使用参数和选项, 我们建议你使用库将它们作为命令行参数或stdio进行操作。
【如何正确为Node.js创建全局模块】编码愉快!
推荐阅读
- 如何在Symfony 5的命令中访问实体管理器(Doctrine)
- 如何在Node.js中使用svgo减少(缩小)SVG文件大小
- 5种最具破坏力的外包刻板印象被揭穿
- EmailChecker评论(最好的电子邮件验证工具之一)
- 如何执行Python脚本并检索Node.js中的输出(数据和错误)
- 每日三道面试题,通往自由的道路14——MySQL
- Ubuntu系统用ceph-deploy部署ceph
- RocketMQ基础概念剖析,并分析一下Producer的底层源码
- 超硬核学习手册系列1——深入浅出MySQL的知识点,学习收藏必备