npm 包研发项目辅助性命令行工具集
中国人——特别是汉族人,理应坚持广泛、规范地使用汉语。凡非必要之情形不说外国话、不用外国字。此乃天经地义!然则每当必要,亦不排斥采用外国之语言。不妨 博世界之学问,养中国之精神 。
本人亦支持少数民族坚持采用自己民族的传统语言。仍须强调,凡中国人,皆应会用汉语、积极使用汉语,此乃中华各民族之大一统之必由。
NPM 页
- NPM 包名
-
@wulechuan/cli-scripts--npm-project-helpers
- 作者
南昌吴乐川
源代码仓库
简介
言简意赅版
本工具集之主体采用 2 种命令行环境之语言(即 PowerShell 语言和 Bash 语言)编写,仅运行与于命令行环境中。它们用以辅助任何 npm 项目构建适用其环境的命令行实用工具。而构建出的这些实用工具用以“贪婪地”升级该 npm 项目的各依赖包之版本。本工具集亦随附了这些实用工具的雏形,稍加修改即可运转,颇为方便。
特别的,本工具集安装伊始,其内建的 JavaScript 程序会还自动为这些实用工具设计配套的 VSCode 任务,遂更为方便。
本工具集有“实用价值不高”之嫌,但它们满足了我个人的癖好。
运行截屏
如果图片加载太慢,或干脆打不开。不妨改为在以下地方查阅这些图片。
冗长版
由来
本人研发 npm 项目时,常常会“贪婪地”升级各种依赖包的版本。
- 于其中一些依赖包,即便是进行了主版本的升迁,我们自己的 npm 项目也会“很幸运的”照常运转。
- 但另有一些依赖包,如果升级至过于晚近的版本,则我们字节的 npm 项目将无法运转。遂应令这些依赖包之版本保持在某个较旧的版本(范围)。换句话说,这些包的版本有上限约束。
在追求上述形式时,会遇到以下问题:
故本人在几乎所有本人私有的或有本人主导的 npm 项目中都随附了专门的命令行脚本,用以分门别类依照不同策略(贪婪或守限)管理这些依赖包的安装任务。久而久之,提炼成形,汇于本工具集中。以期提升这类工具的自动化水平,减少重复劳动。
特点与价值
诚然,完成上述任务(即指贪婪或守限地升级依赖包)完全可以撰写一些简朴实用的脚本做到。总共也要不了几行命令。 例如:
npm i 甲@latest 乙@latest 丙@latest
npm i -D 戊@latest 已@latest
npm i 庚@1.2.3 辛@4.5.6
npm i -D 壬@3.2.1 鬼@9.8.7
其实本工具集的早期雏形就是这样的简易脚本。
但当上述多个命令顺次执行时,它们的输出既不够美观,也不可一目了然。于我这种吹毛求疵的人而言,此种“简约之美”往往是不可接受的。为使命令行工具的界面信息美观、易读,也为了便于我和“潜在的合作者”交流或交接,我在日常研学中时不时会在“无关痛痒”的美观方面下功夫,逐渐形成了一些辅助性工具,汇集于此。如你所猜想的一般,本工具集侧重为命令行之输出信息做装点,提供相对美观、易读的界面信息,而鲜少有复杂的任务逻辑。何况所谓“核心”的任务逻辑是因项目而异的,并非某通用工具力所能及。
因此,本工具集有“实用价值不高”之嫌,但它们满足了我个人的癖好。
须注意,本套工具之主体均非采用 JavaScript 语言族编写,而是采用 2 种命令行环境之语言编写,即 PowerShell 语言和 Bash 语言。故本工具集之主体仅用于(多种)命令行环境。
虽然本套工具之主体并非 JavaScript 程序,但本工具集仍内建了一些有价值的 JavaScript 程序。每当其他 npm 包(暂称甲)安装完本工具集之际,本工具集内建的那些 JavaScript 程序会自动改动甲的环境配置,例如:
- 将本工具集随附的实用工具之雏形复制到甲中的特定文件夹内(稍加修改即可运转)。
- 构建一些实用的 VSCode 任务,以配合上述实用工具。
以上种种许令甲更方便的利用本工具集。
本工具集之主体在运行时的任务清单
每当允许本工具集中的主体工具(即命令行脚本程序)时,它将依次完成以下任务:
注意,下文所谓“当前 npm 项目”,亦可称“你的 npm 项目”,以区别本工具集。当前 npm 项目安装并利用本工具集。
-
如果配置允许,删除当前文件夹内的 node_modules
文件夹 。
注意,默认配置即允许本程序删除之。
-
如果配置允许,删除当前文件夹内的 package-lock.json
文件 。
注意,默认配置即允许本程序删除之。
-
依照预先配置,将当前 npm 项目的【产品级】依赖包中,凡 不必对安装版本做限制者 ,正常安装。采用的命令是 npm i
。
所谓【产品级】依赖包,即是指列示在当前 npm 项目自身的 package.json
中的 dependencies
条目中的一切子条目。
-
依照预先配置,将当前 npm 项目的【产品级】依赖包中,凡 须对安装版本做出限制者 ,正常安装。采用的命令是 npm i
。
-
依照预先配置,将当前 npm 项目的【研发级】依赖包中,凡 不必对安装版本做限制者 ,正常安装。采用的命令是 npm i -D
。
所谓【研发级】依赖包,即是指列示在当前 npm 项目自身的 package.json
中的 devDependencies
条目中的一切子条目。
-
依照预先配置,将当前 npm 项目的【研品级】依赖包中,凡 须对安装版本做出限制者 ,正常安装。采用的命令是 npm i -D
。
-
如果存在与“ 更新与研发相关的数据库 ”有关之任务,则执行这些任务。须知,这些任务由当前 npm 项目的维护者自由设计。本工具集仅提供较美观的提示信息,别无其它。
-
如果存在与“ 其他交代 ”有关之任务,则执行这些任务。须知,这些任务由当前 npm 项目的维护者自由设计。本工具集仅提供较美观的提示信息,别无其它。
由上可见,为当前 npm 项目安装或更新 npm 依赖包是本工具集之主要任务。它将当前 npm 项目的各色依赖包分为四个种类,分别安装之。将依赖包归为这四类之一,须事先做一点配置工作。但是,配置工作在本工具集的 Bash 版本和 PowerShell 版本之间是有区别的,如下:
-
PowerShell 语言更为强大而灵活,故我采用 PowerShell 语言已经实现了“描述性”的配置,而将处理该配置的逻辑细节统统隐藏。非但如此,但本工具集在安装完成之际,会借助内部的 JavaScript 程序自动扫描当前 npm 项目的 package.json
文件,并据此构建出实用的 PowerShell 脚本。如果你的项目不会频繁变更依赖包之集合,那么该自动产生的 PowerShell 脚本令你近乎“无”劳永逸。
-
限于本人的 Bash 应用水平,本工具集的 Bash 版本并不能做“花式”的配置。具体而言,理论上你需要手工书写命令行。但本工具集在安装完成之际,会借助内部的 JavaScript 程序自动扫描当前 npm 项目的 package.json
文件,并据此构建出实用的 bash 脚本。这些 bash 脚本的内容平淡无奇,但所幸就在“自动生成”四个字上。如果你的项目不会频繁变更依赖包之集合,那么该自动产生的 Bash 脚本令你近乎“无”劳永逸。
安装与使用
安装
本工具集虽然运行在命令行环境(【PowerShell】 或【类 Bash】),但专门服务于各色 npm 项目,且其自动化安装和部署之功能也有赖于 npm 。自然的,本人令本工具集依托 npm 发行,故安装本工具集也应当借助 npm 。
脱离 npm 来安装本工具集之方法无实用价值。从略。
依托 npm 服务框架来安装本工具集之步骤如下:
-
确保你的计算机或你的容器(例如 Docker Container)中已经安装了 Nodejs。见《Nodejs 官方下载页》。
-
虽然 Nodejs 往往会随附一个名为 npm 的工具。但是,一来此事并不一定(例如 Ubuntu 环境的 Nodejs 有可能并不附带 npm);二来即便 Nodejs 附带了一份 npm,该 npm 之版本也未必最新的。故而,推荐于此时机安装 最新版 的 npm 。
-
以下方法假定你所安装的 Nodejs 确实随附了一份 npm,并利用该随附的、较旧版本的 npm 来安装最新版的 npm 。
npm i -g npm
-
以下假定在 Ubuntu 系统安装 Nodejs 之后, npm 仍未安装。从零开始安装 npm 的步骤如下。
apt update
apt install npm
-
借助 cd
命令来到你的项目根文件夹,再用以下命令将你的项目初始化成一个 npm 项目。
npm init -y
具体而言,npm 将在该文件夹内创建一个文件,名为“ package.json
”,仅此而已。该文件是一切 npm 项目的关键配置,也是该类项目的本质特征。
-
借助 npm 正式安装本工具集。
npm i -D @wulechuan/cli-scripts--npm-project-helpers
此时,本工具集内建的 JavaScript 程序将尝试自动配置你的项目(暂称甲)。如下:
- 如果甲中尚无
.vscode/tasks.json
这一文件,本工具集将创建之。 - 修订
<甲>/.vscode/tasks.json
,使得甲具备几个专门用于调用本工具集之命令行脚本的【任务】。 - 本工具会尽量将一个采用 PowerShell 语言撰写的命令行脚本文件复制到
<甲>/用于研发阶段的命令行工具集/PowerShell/
这一文件夹内。如果此文件夹中原先已有同名脚本文件,则这些旧文件将得到保留,不会被覆盖。但自本工具集之 JavaScript 程序会尽可能修订业已存在的旧有命令行脚本文件。 - 本工具会尽量将一个采用 Bash 语言撰写的命令行脚本文件复制到
<甲>/用于研发阶段的命令行工具集/bash/
这一文件夹内。如果此文件夹中原先已有同名脚本文件,则这些旧文件将得到保留,不会被覆盖。但自本工具集之 JavaScript 程序会尽可能修订业已存在的旧有命令行脚本文件。
使用
在 PowerShell 环境中运行本工具集
本说明书中针对 PowerShell 环境给出的示例(见下文)较简易,以突出要素。
而本工具集随附的 JavaScript 程序会自动在你的 npm 项目的特定文件夹中产生一个 PowerShell 脚本文件,该文件之内容远比下例更复杂、更实用。可直接阅读并修订之。
另,本工具集自用之 PowerShell 脚本文件 与上述自动产生的 PowerShell 脚本文件高度相似,亦可参阅:
PowerShell 环境中的简易用法示例 1
[string]${script:吴乐川的模块的路径} = '.\node_modules\@wulechuan\cli-scripts--npm-project-helpers\源代码\发布的源代码\PowerShell'
Import-Module "${script:吴乐川的模块的路径}\吴乐川-数据处理-文本.psm1"
Import-Module "${script:吴乐川的模块的路径}\吴乐川-管理某-npm-项目的依赖包等资源.psm1"
# 第一个重要步骤(或者说第一种重要任务):
# 配置好一个较复杂但颇有规律的对象(又称 【HashTable】、【字典】、【键值对】等)。
# 该对象用以充分说明当下 npm 项目所依赖的所有包的版本情况。
${private:本产品所有的_npm_依赖包的安装版本配置总表} = @(
@{
# 说白了就是 npm install ,而不带 --save-dev 之参数。
这批依赖包之依赖类别 = '本产品拟囊括这些软件之整体或部分'
这批依赖包之安装版本配置集 = @{
'chalk' = @('^4', '新买的粉笔受潮了。')
'fs-extra' = $null
'jsonc-parser' = $null
'vue' = @('=2.6.14', '本项目暂不打算迁移至 Vuejs 3.x 。')
}
}
@{
# 说白了就是 npm install --save-dev 。
这批依赖包之依赖类别 = '本产品仅会在研发阶段借助这些软件'
这批依赖包之安装版本配置集 = @{
'@wulechuan/cli-scripts--git-push' = $null
'eslint' = '1.2.3'
'gulp' = @('3', '这是一个很旧的项目,采用了 Gulpjs 3.x 。')
}
}
)
# 第二个重要步骤(或者说第二种重要任务):
# 将第一个步骤配置好的对象通过管道(pipeline)传递给我的程序。
${private:本产品所有的_npm_依赖包的安装版本配置总表} | Update-吴乐川更新当前_npm_项目的所有批次的依赖包 -安装之前应先删除旧有的_node_modules_文件夹
# 大功告成。
#
#
#
#
#
PowerShell 环境中的简易用法示例 2
再举一个稍复杂的例子。本例来自我为某陈旧项目所作的真实配置。参见上文《运行截屏》。
# 本例来自我为某陈旧项目所作的真实配置。
#
# 不妨指出,该例仅是片段,并非全文。
# 虽为片段,仍可以在 PowerShell 环境中运行,不会报错。
# 但徒有此片段则并无实用价值。故从实用角度出发可视本片段为 “ 不可运转 ” 。
# 本片段须代入上例中更 “ 真实 ” 的 PowerShell 文件方具实用价值。
${private:本产品所有的_npm_依赖包的安装版本配置总表} = @(
@{
# 取 '本产品拟囊括这些软件之整体或部分' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install ,而不带 --save-dev 之参数。
这批依赖包之依赖类别 = '本产品拟囊括这些软件之整体或部分'
这批依赖包之安装版本配置集 = @{
# 如果 @wulechuan/cli-scripts--npm-project-helpers 工具集随附的 JavaScript 程序运行如期,
# 其将在此处插入当前 npm 项目的【产品级】依赖包的列表。 另,切勿改动该行。该行之部分文字是供 JavaScript 程序识别的特殊记号。
'@riophae/vue-treeselect' = $null
'@wulechuan/echarts-vue2-component' = $null
'axios' = $null
'clipboard' = $null
'core-js' = $null
'echarts' = $null
'element-ui' = $null
'file-saver' = $null
'fuse.js' = $null
'highlight.js' = @('^10')
'js-beautify' = $null
'js-cookie' = $null
'jsencrypt' = $null
'normalize.css' = $null
'nprogress' = $null
'quill' = $null
'screenfull' = ('^5')
'sheetjs-style' = $null
'sheetjs-style-v2' = $null
'sortablejs' = $null
'vue' = ('^2', '不打算迁移至 Vuejs 3。')
'vue-count-to' = $null
'vue-cropper' = $null
'vue-quill-editor' = $null
'vue-router' = ('~3.4', 'vue-router 即便升级到区区 v3.5.x 版, vueRouterInstance.addRoute 也会报错。只能停留在 v3.4.x ,目前是 v3.4.9 。')
'vuedraggable' = $null
'vuex' = ('^3')
'xlsx' = ('~0.17', (@( # 提醒 PowerShell 新手,这里列表外层的括弧不可省略。
"xlsx 如果更新到 v0.18.x 版,那么所有相关的导入语句须"
" 改写为 `“ import * as XLSX from 'xlsx' `”。"
"`n"
"如果停留在 v0.17.x 版,则导入语句维持不变,即"
" 为 `“ import XLSX from 'xlsx' `”。"
"`n"
"为求稳妥,暂不升级至 v0.18.x 版。"
) -join "")
)
'xlsx-js-style' = $null
'xlsx-style' = $null
}
}
@{
# 取 '本产品仅会在研发阶段借助这些软件' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install --save-dev 。
这批依赖包之依赖类别 = '本产品仅会在研发阶段借助这些软件'
这批依赖包之安装版本配置集 = @{
# 如果 @wulechuan/cli-scripts--npm-project-helpers 工具集随附的 JavaScript 程序运行如期,
# 其将在此处插入当前 npm 项目的【研发级】依赖包的列表。 另,切勿改动该行。该行之部分文字是供 JavaScript 程序识别的特殊记号。
'@vue/cli-plugin-babel' = @('~4.4')
'@vue/cli-plugin-eslint' = @('~4.4')
'@vue/cli-service' = @('~4.4')
'@wulechuan/cli-scripts--git-push' = $null
'@wulechuan/css-stylus-markdown-themes' = $null
'babel-eslint' = $null
'chalk' = $null
'connect' = $null
'eslint' = @('^6', (@( # 提醒 PowerShell 新手,这里列表外层的括弧不可省略。
"若安装 eslint@8 则无法正常运转。"
"`n"
"安装 eslint@7.x 可以正常运转,但在凭借本文件安装时,会有不兼容之警告;而直接 npm i 却又没有警告。"
"`n"
"安装 eslint@6.x 则完全无问题。"
) -join "")
)
'eslint-plugin-vue' = @('^6', '同 eslint 。')
'lint-staged' = $null
'runjs' = $null
'sass' = @('~1.32', (@( # 提醒 PowerShell 新手,这里列表外层的括弧不可省略。
"sass@1.43.x 或更晚版本在运行期间会在命令行终端"
" 报 `“ 斜杠作为分隔符或除号有潜在歧义 `” 的错误。且消息是彩色的。"
"`n"
"sass@1.33.x 运行期间也会在命令行终端报上述错误,但消息是单色的。"
"`n"
"sass@1.32.x 或更旧的版本在运行期间不会给出上述警告。"
"`n"
"顺便指出,上述警告涉及的 Sass 旧语法都来自 ElementUI ,"
"而非我们的代码。所以我们无能为力。"
"`n"
"总之,即便安装当下最新的 sass@1.51.0 ,最终构建的应用也看不出什么异常。"
"但程序员须忍受大量的警告信息。"
"若要避免警告信息,则必须安装 sass@1.32.x 或更旧的版本。"
) -join "")
)
'sass-loader' = @('^10', (@( # 提醒 PowerShell 新手,这里列表外层的括弧不可省略。
"若安装 sass-loader@11 或更晚版本,则在凭借本文将安装时,"
"或警告 webpack 不应低于第 5 版。但实际运转看不出异常。"
"换句话说,sass-loader@10 会锁定 webpack@4 ,"
"这二者搭配,则安装依赖包时不会有不兼容之警告。"
) -join "")
)
'script-ext-html-webpack-plugin' = $null
'svg-sprite-loader' = $null
'vue-template-compiler' = @('^2', (@( # 提醒 PowerShell 新手,这里列表外层的括弧不可省略。
"vue-template-compiler 必须与【产品依赖包】中"
"的 vue 的版本`“严格一致,不差分毫`”。"
"否则在运行期间会遭遇 `“ parseComponent `” 的错误。"
) -join "")
)
# - - - - - - - - - - - - - - - - - - - - - - - - - - -
'webpack' = @('^4', '因 sass-loader 有此要求。')
}
}
)
在 PowerShell 环境中为诸 npm 依赖包配置版本范围
由上例可见,在 PowerShell 环境中,为一组 npm 依赖包配置版本范围,关键是配置 PowerShell 的 HashTable
。配置时,需尊照本人设计的数据结构,或者说本人设计的规则。
为 npm 依赖包配置版本时应遵守的结构性规则( Shcema )
-
采用 PowerShell 语言描述之。
如果你对 PowerShell 代码有些陌生,一时间不能完全理解,那也无妨。后面我将故意借助两种其它计算机语言来“类比”式的讲解 PowerShell 的配置项的规则集。一种是 JSON(准确的说是 JSONC),另一种是 TypeScript 。
另,不妨参考本文所附《附:PowerShell 的一些基本知识》一节。
# 节选自“由工具集自动构建的命令行脚本”。
${private:本产品所有的_npm_依赖包的安装版本配置总表} = @(
@{
# 取 '本产品拟囊括这些软件之整体或部分' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install ,而不带 --save-dev 之参数。
这批依赖包之依赖类别 = '本产品拟囊括这些软件之整体或部分'
这批依赖包之安装版本配置集 = @{
# 为方便指称,本注释块中将 @wulechuan/cli-scripts--npm-project-helpers 中的 PowerShell 工具简称为 “【本程序】”。
#
# 配置示范集:
#
# 'chalk' = $null # 这意味着将安装 chalk 最晚的版本,即 chalk@latest 。
# 'chalk' = @($null) # 这意味着将安装 chalk 最晚的版本,即 chalk@latest 。
# 'chalk' = 'latest' # 这意味着将安装 chalk 最晚的版本,即 chalk@latest 。
#
# 'vue' = @('^2', '不打算迁移至 Vuejs 3。') # 这意味着将安装 vue 的 `v2.x.x` 版,即 vue@^2 。
#
# 'vue' = @( 2, '不打算迁移至 Vuejs 3。') # 这意味着将安装 vue 的 `v2.x.x` 版,即 vue@^2 。
# # 但像这样采用整型(Int32)而不是文本型(String)的写法并不好。
# # 类似的,采用浮点型(Double)的写法(例如 2.6 )也不好。
# # 推荐总是采用文本型。例如 '2' 、'2.6' 。
#
# 'through2' = 0 # 【本程序】对数字【零】做了特别关照,将其理解为 '0' 。npm 进而将其理解为 '^0.0.0' 。
#
# - - - 以下均是错误的写法 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#
# 'glob' = ($null, '我想升级到最新版本。') # 这样写,【本程序】将报错并退出!
# # 原因:该写法并没有锁定 glob 的版本范围,确给出了所谓 “原因” 。
# # 【本程序】要求不锁定版本范围则不应给出原因。如此严格的要求,是故意为之。
# # 谨防出现 “原本想锁定版本范围却忘记配置版本” 的情形。
#
# 'glob' = 1.1.2 # 这种写法不正确!但【本程序】不会报错!
# # 因为,此处 1.1.2 的这种写法,
# # PowerShell 不会将其理解为文本(string),
# # 而是理解为无效的浮点数(Double),进而替换为 $null 值。
# # 由是,【本程序】无从获得 '1.1.2' ,而只能获得 $null ,并自动将 $null 理解为 'latest' 。
}
}
@{
# 取 '本产品仅会在研发阶段借助这些软件' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install --save-dev 。
这批依赖包之依赖类别 = '本产品仅会在研发阶段借助这些软件'
这批依赖包之安装版本配置集 = @{
'@wulechuan/cli-scripts--git-push' = $null
'eslint' = $null
}
}
)
-
如果你对 PowerShell 代码有些陌生,一时间不能完全理解;同时,假如你熟悉 JSON 格式,那么我不妨假借一个 JSON(实则 JSONC) 来向你说明上述 PowerShell 中各 npm 包配置项集应遵循的数据结构。望能达意。
/**
* 注意!
* 本工具并未构建下方的 JSON 数据,
* 更不会在 PowerShell 程序中试图读取这种设计格式的文件或资源。
* 给出 JSON ,纯粹是为了以“类比”的方式
* 向各位说明 PowerShell 采用的数据结构罢了。
* 领会精神即可。
*/
[
{
"这批依赖包之依赖类别": "本产品拟囊括这些软件之整体或部分",
"这批依赖包之安装版本配置集": {
/** 意味着不对版本做限制,最终落实时即等效于 'latest' 。 */
"npm依赖包的完整名称": null,
/** 同样意味着不对版本做限制。 */
"npm依赖包的完整名称": "latest",
/**
* 当写明版本时,意味着对版本做限制。
* 总是推荐些文本(string),而不要写数字(number)。
*/
"npm依赖包的完整名称": "=1.2",
"npm依赖包的完整名称": "~2.3.4",
/**
* 不推荐这样写,因为容易引发人为疏忽。
* 参考下方的反面例子。
*/
"npm依赖包的完整名称": 1.2,
/**
* 你瞧,像下面这样就错了。
* PowerShell 解释器不会将下方的 2.3.4 理解为一个文本,
* 当然,你此刻读到的并不是 PowerShell 代码,
* 而是 JSONC 代码,领会精神即可。
* 而是会将其理解为一个无效的浮点数,进而通知我的程序它取 null 值。
* 当然,在 PowerShell 的世界,
* null 应写作 $null ,前面有一个美元符号。
* 领会精神即可。
* 换句话说,我的 PowerShell 程序将无从获得这个值。
* 糟糕的是,此时程序并不报错退出。相反,它将“顺畅地”执行到底。
* 这是因为,由上文第一个例子可知,此时的值等效为 'latest' 。
*/
"npm依赖包的完整名称": 2.3.4, /** 这是错误的! */
/** 上面这行是错误的!是反面案例。 */
/**
* 如下方这般,给一个二元列表(Array)也是可以的。
* 其中允许存放两个项:
* - 第一个项(即下标为 [0] 的项),
* 代表版本范围。
*
* - 第二个项(即下标为 [1] 的项),
* 存放“为什么要限定该 npm 依赖包版本的范围”。
*
* 但该例的列表明明是一个一元列表。何故?
* 这是因为,在不对版本做限制的情形下,
* 第二个条目必须省略。
* 另见下方的反面案例。
*/
"npm依赖包的完整名称": [ null ],
"npm依赖包的完整名称": [
"2.3.4",
"锁定至 v2.3.4 的原因可能是我不打算改动任何代码了。"
],
/**
* 下方又是一个反面案例。即,它也是错误的写法。
* 并且注意,遇到此种写法,本程序将报错并退出!
*
* 因为,下方的写法,
* - 既要求不对 npm 依赖包的版本做限定,
* - 又给出了所谓“限度版本范围的缘由”。
* 这是不行的!
* 正确的做法是,每当第一项(即下标为 [0] 的项)
* 取值等效为 'latest' 时,必须省略第二项。
*
* 如此严格的要求,是故意为之。谨防出现
* “原本想锁定版本范围却忘记配置版本”的情形。
*/
"npm依赖包的完整名称": [
"latest",
"没什么好原因,我只是想在此写几个字。" /** 这是错误的! */
]
/** 上面这行是错误的!是反面案例。 */
}
}
]
-
如果你对 PowerShell 代码有些陌生,一时间不能完全理解;同时,如果你是 TypeScript 的程序员,那么我不妨假借下例来向你说明 PowerShell 中各 npm 包配置项集应遵循的数据结构。望能达意。
type 范_吴乐川的上述_PowerShell_中的配置项总集 = Array<
{
这批依赖包之依赖类别: '本产品拟囊括这些软件之整体或部分' | '本产品仅会在研发阶段借助这些软件';
这批依赖包之安装版本配置集: {
[npm依赖包之名称: string]: (
| 范_吴乐川的_npm_依赖包的版本配置值
| 范_吴乐川的单一_npm_依赖包的版本配置取值的列表形式
);
};
}
>;
type 范_吴乐川的_npm_依赖包的版本配置值 = null | string | number;
type 范_吴乐川的单一_npm_依赖包的版本配置取值的列表形式 = [
范_吴乐川的_npm_依赖包的版本配置值,
string,
]
附:PowerShell 的一些基本知识
PowerShell 中的对象
PowerShell 中的对象(也称 【HashTable】、【字典】、【键值对】等),采用 @
符号开头,后跟一对【半角花括号】。在花括号内可以填写任意多个键值对。键与值之间用等号相连,键、值、等号之间可以留有任意多个空格。这些键值对的值不必统一数据类型,这一点类似 JSON 。多个键值对之间可以采用半角逗号分隔;也可以采用换行符分隔,即一行一个键值对值,此时逗号不再必须。
$对象甲 = @{}
$对象乙 = @{
属性子 = '鼠'
属性丑 = '牛'
属性寅 = '虎'
属性卯 = '兔'
}
PowerShell 中的列表
PowerShell 中的列表(也称 【数组】、【数列】等)。采用 @
符号开头,后跟一对【半角圆括号】。在园括号内可以填写任意多个值。这些值不必统一数据类型,这一点类似 JSON 。
多个值可以采用半角逗号分隔;也可以采用换行符分隔,即一行一个值,此时逗号不再必须。
$列表丙 = @()
$列表丁 = @(
'达娃力大无穷', '二娃千里眼和顺风耳' # 这里省略了逗号,采用换行符作为元素之间的分隔符。
'三娃刀枪不入' # 这里省略了逗号,采用换行符作为元素之间的分隔符。
'四娃擅火', '五娃擅水',
'六娃有隐身术' # 这里省略了逗号,采用换行符作为元素之间的分隔符。
'七娃有宝葫芦' # 这里不准有逗号——所谓“尾后逗号”。有之则报错。
)
在【类 Bash】环境中运行本工具
本说明书中针对 bash 环境给出的示例(见下文)较简易,以突出要素。
而本工具集随附的 JavaScript 程序会自动在你的 npm 项目的特定文件夹中产生一个 Bash 脚本文件,该文件之内容略比下例复杂、实用。可直接阅读并修订之。
实事求是地说,目前本工具集之 Bash 版本,自动化程度很低。因此,其他 Bash 程序对本工具集提供的 Bash 加以利用时,鲜有精彩可言,仅限于调用若干由本工具集提供的功能简朴之函数,以美化输出信息。以上述自动产生的 Bash 脚本文件为例,其中的逻辑并不比下例复杂多少。该自动产生的 .sh 文件的整个内容可谓“平淡无奇”。 所幸就在“自动”二字。
另,本工具集自用之 Bash 脚本文件 与上述自动产生的 Bash 脚本文件高度相似,亦可参阅:
【类 Bash】环境中的用法简例
#!/bin/bash
source './源代码/发布的源代码/bash/吴乐川-管理某-npm-项目的依赖包等资源.sh'
Remove-吴乐川管理某_npm_项目__删除当前文件夹下的_node_modules --should-run-this-task true
Remove-吴乐川管理某_npm_项目__删除当前文件夹下的_package_lock_json --should-run-this-task true
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_产品级_均为最晚版本
npm i \
chalk@latest \
fs-extra@latest \
jsonc-parser@latest
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_产品级_均为最晚版本 --is-ending
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_产品级_均为特定版本
echo '暂无。'
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_产品级_均为特定版本 --is-ending
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_研发级_均为最晚版本
npm i -D \
@wulechuan/cli-scripts--git-push@latest \
eslint@latest
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_研发级_均为最晚版本 --is-ending
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_研发级_均为特定版本
echo '暂无。'
Write-吴乐川管理某_npm_项目__打印提示语__新装或升级某批依赖包_研发级_均为特定版本 --is-ending
Write-吴乐川管理某_npm_项目__打印提示语__更新与研发相关的数据库
if true; then
echo '暂无。'
else
[ 0 ]
fi
Write-吴乐川管理某_npm_项目__打印提示语__更新与研发相关的数据库 --is-ending
Write-吴乐川管理某_npm_项目__打印提示语__其他交代
if true; then
echo '暂无。'
else
[ 0 ]
fi
Write-吴乐川管理某_npm_项目__打印提示语__其他交代 --is-ending
许可证类型
WTFPL
注意:
我未研究过许可证的约束。因此姑且声明为 WTFPL 类型。但实际上该许可证类型可能与我采用的开源模块有冲突。