用Npm构建一个简单的命令行工具

2024-09-01 19:48

本文主要是介绍用Npm构建一个简单的命令行工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文章链接:请戳

Npm构建一个简单的命令行工具

在团队开发过程中,你是用什么工具去调用private package的呢?最常见的答案就是:使用命令行工具来使用它。我们用两部分来介绍如何制作其中一款命令行工具。


场景一:轻松部署GitHub pages

部署项目通常比较繁琐,因此我们使用自动化来完成部署任务。目前,有很多的task runners都可以为我们自动化构建任务,但是最简单的一种方式就是npm run scripts
本章中,我们用构建一个GitHub page的例子来演示,当然我们也可以使用这种方式去部署其他服务,例如Heroku、AWS。或者你可以将它作为一个private package发布,里面包含公司内部代码以及配置选项。

npm run scripts

首先,你定义一段可以被执行的字符串指令,当你调用脚本的时候,在命令行汇中执行npm run scripts,例如,我们为一个脚本命名为patch-release

#package.json
{"name": "index","version": "1.0.1","scripts": {"patch-release": "npm version patch && npm publish && git push --follow-tags"}
}

这里写图片描述

当你执行patch-release的时候,它会通过npm version来修改package.json中的version并且提交更新,然后发布到npm,接着push到GitHub。
如果你在dependenciesdevDependencies配置项中提前设置了modules,你就可以不用在将依赖包设置为全局,它们将是可以直接使用的。并且你也可以在scripts中使用其他的脚本npm run scripts

用脚本发布页面

git-it启发,我们用脚本来部署到GitHub pages,构建步骤如下:

"scripts": {"build": "...","git-commit": "git add -A . && git commit -a -m 'gh-pages update'","git-push": "git push origin gh-pages --force && git checkout master","deploy": "npm run build && npm run git-commit && npm run git-push"},

然后,在我们想要部署的时候,运行npm run deploy即可。

还有更好的方式吗?

这种方式很棒。这将意味着你可以不用去记住那些冗长的字符串指令,以及他们对应的flags。然而,你想按照这种方式部署到其他项目又得大量copy&paste。这将意味着在你的项目中又得大量重复您的代码。
那么,我们怎么才能遵循”don’t repeat yourself”原则呢?我们可以尝试创建一个module,它可以将多个字符串指令合并成为一条指令。这就是说我们在不同的项目里面,可以很轻松的使用和维护这些指令还能分享给团队。
详情参见:戳这里

Step1: 创建一个基本的命令行界面

首先,我们创建一个基本的Common line interface(也称做CLI)。

  1. 创建一个package 清单
    package 清单(即‘package.json’ 文件),它里面含有基本信息,例如包名称(package name),版本号(version)。
    如果你想给你的package限定使用范围,供你的内部团队使用时,你可以考虑使这个包成为private package,设定的范围应该是你的用户名。

    $ npm init --scope=xxx
  2. 创建一个可被执行的脚本文件
    因为我们想要运行命令行,但是前提是我们需要用一个解释器去启动文件(有时候我们称为shebang line)

    
    #! ./node/env nodeconsole.log('console.log output')

现在我们运行测试一下:node bin/commit.js
3. 告诉命令行你的命令是什么
我们想要执行一条命令,那么我们首先得告诉Node如何才能找到能被执行的文件,我们吧这条指令命名为github-pages-commit。同时,我们在package.json文件中添加一个关键字:bin。

{"bin": {"github-pages-commit": "bin/commit.js"}
}
  1. 确保命令可用
    为了测试你的命令被拾取到,使用npm link来执行关联操作,这将确保你的指令(github-pages-commit)是可以被正确执行的。

step2: 执行被提交的命令

现在我们已经验证了一个能被执行的CLI,我们可以添加我们的命令了。
npm run scripts 使用很方便,因为你可以很轻松在命令行中使用指令。在可复用的模块中执行这些脚本很便捷,否则,我们的团队就不能确保那些脚本重用。
我们将使用shelljs模块来实现,或者你也可以使用node‘s child_process,但是使用shelljs有一个好处就是,你可以在window系统中使用大量的unix指令。具体参考文档: 请戳这里。
1. 将shelljs 作为依赖

$ npm install --save shelljs

将会在package.json文件中被添加为依赖(dependency)
2. 测试 shll.exec() 运行正常
为了确保我们掌握shell.exec()如何工作,我们将添加一个简单的输出声明到 bin/commit.js


#! /node/env node$ var shell = require('shelljs')
shell.exec('echo shell.exec works')
  1. 使github-pages-commit 执行一个提交
    为此,我们在命令行中简单的添加一个命令,用它来执行一次提交
    
    #! ./node/node$ var shell = require('shelljs')
    shell.exec("git add -A . && git commit -a -m 'update' ")

为了测试这个,打开另一个命令行窗口并转到您使用GitHub页面的repo进行更改,然后运行github-pages-commit。在运行git log之后,您应该看到提交消息的提交gh-pages update。

step3: 添加其他两个命令

  1. 添加 bin/push/js

    
    # /user/bin/env node$ var shell = require('shelljs')
    $ shell.exec('git push origin master --force')
  2. 添加 bin/deploy.js
    我们通过定义过的其他指令进行合并

    
    #! /node/env nodevar shell = require("shelljs")
    shell.exec("github-pages-commit && github-pages-push")
  3. 映射指令文件

    {"github-pages-commit":"bin/commit.js","github-pages-push":"bin/push.js","githuv-pages-deploy":"bin/deploy.js"
    }
  4. 再次执行npm link
    您需要npm link再次运行,以便它将创建两个新的符号链接。
    现在您可以进行其他更改并运行github-pages-deploy以测试完整的任务。

step4: 发布你的package

如果你之前从未发布过软件包,请戳这里
因为这是一个有作用域的包,如果你想公开发布,必须使用access选项,了解更多请戳这里

npm publish --access=publish

最后,付费会员可以发布private package。

step5: 将你的命令添加为npm run scripts

我们可以告诉我们的团队在全局安装这个模块,然后所有的指令都将可以在命令行中运行,我们不需要用npm 运行脚本,但是全局安装有两个缺点:首先,在新同事着手一个项目的时候他得体检做一些准备工作,其次,当项目依赖更新的时候,你的团队成员必须也要更新全局模块。
相反,我们要使它的一个devDependencies在package.json为我们要部署的项目。通过这种方式,当新开发人员npm install开始运行项目时会下载它,并且每次开发人员运行时都会进行更新npm update。

$ npm install --save-dev @xxx/github-pages-deploy

现在您可以将可复用命令添加为npm运行脚本

{"scripts":{"build": "....","deploy": "github-pages-deploy"}
}

TO BE CONTINUE…

这篇关于用Npm构建一个简单的命令行工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127884

相关文章

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程