-
Notifications
You must be signed in to change notification settings - Fork 0
/
Update-更新所有-npm-依赖包至允许范围内的最新版本.ps1
299 lines (189 loc) · 13.1 KB
/
Update-更新所有-npm-依赖包至允许范围内的最新版本.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
#
# 绝大多数情形下,
# 使用者仅需关注本文件的 PROCESS 一节,
# 而完全不必触碰 BEGIN 、 END 两节。
#
# 顺便提醒,即便故意将 PROCESS 一节写在 BEGIN 之前,或写在 END 之后,
# PowerShell 语言的原生机制也会
# 强制三者依照先 BEGIN ,而后 PROCESS ,最后 END 的顺序执行。
# 为便于修订本文件,遂故意令 PROCESS 一节在最顶部。
Param(
[Alias('保留NM', '保留_node_modules')]
[switch]$应保留旧有的_node_modules_文件夹,
[Alias('保留PL', '保留_package_lock_json')]
[switch]$应保留旧有的_package_lock_json_文件,
[Alias('dry-run')]
[switch]$仅作仿真演练,
[Alias('npm-args')]
[string]$NPM参数序列
)
PROCESS {
[boolean]${script:安装之前应先删除旧有的_node_modules_文件夹} = $true
[boolean]${script:安装之前应先删除旧有的_package_lock_json_文件} = $true
[boolean]${script:应仅作仿真演练} = $false
[string] ${script:NPM安装依赖包时须额外带上的参数序列} = '' # '--foreground-scripts'
if ($应保留旧有的_node_modules_文件夹) {
${script:安装之前应先删除旧有的_node_modules_文件夹} = $false
}
if ($应保留旧有的_package_lock_json_文件) {
${script:安装之前应先删除旧有的_package_lock_json_文件} = $false
}
if ($仅作仿真演练) {
${script:应仅作仿真演练} = $true
}
if ("$NPM参数序列") {
${script:NPM安装依赖包时须额外带上的参数序列}="${NPM参数序列}"
}
Try {
# ────────────────────────────────────────────────────────────────
# 1) 按需删除 node_modules 文件夹。
# 2) 按需删除 package-lock.json 文件。
# 3) 安装依赖包。
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 顺便提醒,虽然一般而言 latest 版本应恰为最高版本,但并不确保。
# ────────────────────────────────────────────────────────────────
${private:本产品所有的_npm_依赖包的安装版本配置总表} = @(
@{
# 取 '本产品拟囊括这些软件之整体或部分' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install --save-prod 。
这批依赖包之依赖类别 = '本产品拟囊括这些软件之整体或部分'
这批依赖包之安装版本配置集 = @{
# 为方便指称,本注释块中将 @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' 。
# 如果 @wulechuan/cli-scripts--npm-project-helpers 工具集随附的 JavaScript 程序运行如期,
# 其将在此处插入当前 npm 项目的【产品级】依赖包的列表。 另,切勿改动该行。该行之部分文字是供 JavaScript 程序识别的特殊记号。
'@wulechuan/text-basic-typography' = $null
'chalk' = $null
'fs-extra' = $null
'jsonc-parser' = $null
}
}
@{
# 取 '本产品仅会在研发阶段借助这些软件' ,
# 说白了就是在安装这些依赖包时,会采取该命令:
# npm install --save-dev 。
这批依赖包之依赖类别 = '本产品仅会在研发阶段借助这些软件'
这批依赖包之安装版本配置集 = @{
# 如果 @wulechuan/cli-scripts--npm-project-helpers 工具集随附的 JavaScript 程序运行如期,
# 其将在此处插入当前 npm 项目的【研发级】依赖包的列表。 另,切勿改动该行。该行之部分文字是供 JavaScript 程序识别的特殊记号。
'@wulechuan/cli-scripts--git-push' = $null
'eslint' = $null
}
}
)
${private:本产品所有的_npm_依赖包的安装版本配置总表} | Update-吴乐川更新当前_npm_项目的所有批次的依赖包 `
-应仅作仿真演练:${script:应仅作仿真演练} `
-安装之前应先删除旧有的_node_modules_文件夹:${script:安装之前应先删除旧有的_node_modules_文件夹} `
-安装之前应先删除旧有的_package_lock_json_文件:${script:安装之前应先删除旧有的_package_lock_json_文件} `
-NPM安装依赖包时须额外带上的参数序列 "$NPM安装依赖包时须额外带上的参数序列"
# ────────────────────────────────────────────────────────────────
# 4) 更新与研发相关的数据库。
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# 例如: Browserslist:caniuse-lite
# ────────────────────────────────────────────────────────────────
Write-吴乐川管理某_npm_项目__打印提示语__更新与研发相关的数据库 -应仅作仿真演练:${script:应仅作仿真演练}
if ($true) {
Write-Host '暂无。'
} else {
# ───────────────────────────
if ($false) {
if (${script:应仅作仿真演练}) {
Write-Host -NoNewline " 【仿真演练】`n "
}
Write-Host 'npx browserslist@latest --update-db'
if (-not ${script:应仅作仿真演练}) {
npx browserslist@latest --update-db
}
Write-Host
}
# ───────────────────────────
}
Write-吴乐川管理某_npm_项目__打印提示语__更新与研发相关的数据库 -应仅作仿真演练:${script:应仅作仿真演练} -该信息系作为任务结束语
# ────────────────────────────────────────────────────────────────
# 5) 其他交代。
# ────────────────────────────────────────────────────────────────
Write-吴乐川管理某_npm_项目__打印提示语__其他交代 -应仅作仿真演练:${script:应仅作仿真演练}
if ($false) {
Write-Host '暂无。'
} else {
# 此处不妨做些关于当前 npm 项目的必要交代。例如注意事项、关键步骤等等。
Write-Host -F 'Yellow' '以下是一个 JavaScript 对象。'
Write-Host
Write-Host '{'
Write-吴乐川打印_JSON_键 -Indent 1 '爷爷' -ValueIsObject
Write-吴乐川打印_JSON_键 -Indent 2 '葫芦娃' -ValueIsObject
Write-Host
Write-吴乐川打印_JSON_注释_并换行 -Indent 3 '// 实验证明,截止 2022-05-26 ,'
Write-吴乐川打印_JSON_注释_并换行 -Indent 3 '// 大娃必须是力娃子。'
Write-吴乐川打印_JSON_键 -Indent 3 '大娃'
Write-吴乐川打印_JSON_值_文本型 -IsValueOfLastKey '力娃子'
Write-吴乐川打印_JSON_某字典结束 -Indent 2
Write-吴乐川打印_JSON_某字典结束 -Indent 1
Write-Host '}'
}
Write-吴乐川管理某_npm_项目__打印提示语__其他交代 -应仅作仿真演练:${script:应仅作仿真演练} -该信息系作为任务结束语
} catch {
${private:RunTimeException} = $_
}
}
BEGIN {
# 该名为 BEGIN 之代码块故意安排在 PROCESS 代码块之后。但实际上 BEGIN 会在 PROCESS 之前运行。
${private:RunTimeException} = $null
[string]${private:执行本命令前的工作路径} = "$PWD"
Write-Host "`n【当下工作路径】:`n '$PWD'"
if ("$PWD" -match "\\用于研发阶段的命令行工具集\\PowerShell`$") {
${private:执行本命令前的工作路径} = "$PWD"
Set-Location '..\..\' # 确保进程的当前路径为接受本工具集服务的 npm 包的根文件夹。
Write-Host "`n【当下工作路径】临时变更为:`n '$PWD'"
}
Write-Host
Write-Host
Write-Host
# 下方这一行的写法专门针对本工具集自身,不适应于其他任何 npm 项。
[string]${script:吴乐川的模块的路径} = '.\源代码\发布的源代码\PowerShell'
# 在采用本工具集的其他 npm 项目中,应这样写:
# [string]${script:吴乐川的模块的路径} = '.\node_modules\@wulechuan\cli-scripts--npm-project-helpers\源代码\发布的源代码\PowerShell'
Import-Module "${script:吴乐川的模块的路径}\吴乐川-打印-json.psm1"
Import-Module "${script:吴乐川的模块的路径}\吴乐川-数据处理-文本.psm1"
Import-Module "${script:吴乐川的模块的路径}\吴乐川-管理某-npm-项目的依赖包等资源.psm1"
}
END {
if (${private:执行本命令前的工作路径} -and ("${private:执行本命令前的工作路径}" -ne "$PWD")) {
Set-Location "${private:执行本命令前的工作路径}"
Write-Host "`n【当下工作路径】已复原。"
}
if (${private:RunTimeException}) {
Write-Host
Write-Host -F 'Red' '执行过程曾出错。'
Write-Host
throw ${private:RunTimeException}
}
}