个性化阅读
专注于IT技术分析

如何正确为Node.js创建全局模块

本文概述

许多开发人员每天都会在NPM上发布其软件包。它们中的大多数非常有用, 它们通过代码和命令行来提供模块的用法, 但是并不是所有它们都全局地公开其模块(不是因为你没有使用-g标志执行install命令, 而是模块ain’ t配置为全局使用)。如果他们提供的实用程序(script.js)可以执行某些特殊操作, 则要从命令行执行该实用程序, 你将需要提供脚本路径并使用node调用它:

node ../path/to/my-awesome/tool/script.js --arguments somevalue

如果你经常使用它, 会有些痛苦。相反, 你想要的是, 应用程序开发人员具有一定的权限, 独创性, 并像著名的框架和工具集(例如Cordova或TypeScript)那样公开应用程序的全局命令, 将工具名作为命令指令, 而其余命令:

cordova do-something
REM or other tools
tsc do-other-thing
nodemon 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):

npm初始化Node.js

或手动创建具有以下内容的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"
}

对于我们的示例模块来说就足够了, 简单不是吗?该模块的结构为:

全局模块结构1

2.创建全局模块文件

在模块的根目录内创建一个名为bin的新文件夹, 并在其中包含以下内容的新js文件(demo-global.js):

#!/usr/bin/env node

var myLibrary = require('../lib/index.js');

// Displays the text in the console
myLibrary.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示例

要卸载它(即使从本地安装), 请执行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 argument
var name = args[0];

var myLibrary = require('../lib/index.js');

// Displays the text in the console
myLibrary.say(name + ', get back, come on before we crack Lose your blues, everybody cut footloose');

可以通过以下方式触发:

dosomethingawesome Carlos

并会生成输出:

带参数的CLI全局命令NodeJS

如果你真的想在脚本中使用参数和选项, 我们建议你使用库将它们作为命令行参数或stdio进行操作。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何正确为Node.js创建全局模块

评论 抢沙发

评论前必须登录!