全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 20 道配套习题

npm scripts高级应用专题

专题说明

本专题深入npm scripts的高级用法,涵盖生命周期钩子机制、内置事件触发时机、脚本并行与串行执行控制、跨平台兼容方案以及参数传递技巧。

学习目标

  1. 掌握pre/post前缀定义脚本钩子与执行顺序
  2. 理解prepare、prepublishOnly等内置钩子的触发时机
  3. 能够使用&&、&与工具实现脚本组合控制
  4. 学会使用cross-env等工具解决跨平台兼容问题
  5. 掌握--分隔符向npm脚本传递命令行参数

学习内容

  • 生命周期钩子:pre/post前缀、执行顺序
  • 内置事件:prepare、prepublishOnly等触发时机
  • 并行与串行:&&、&及工具组合控制
  • 跨平台兼容:cross-env、rimraf等工具
  • 参数传递:--分隔符传递命令行参数

学习建议

  1. pre/post钩子是自动化工作流的核心,务必深入理解
  2. 跨平台项目应优先使用cross-env替代直接设置环境变量
  3. 复杂脚本建议使用npm-run-all等工具统一管理

📝 配套习题(20 题)

💡 参考答案在文末
判断题
1

npm的pre生命周期钩子(如prebuild)如果以非零退出码退出,对应的主脚本(如build)仍然会继续执行。

A

B

2

执行npm run test -- --watch时,--watch参数会传递给npm test脚本。

A

B

3

npm install(不带参数)执行时,postinstall钩子在依赖安装完成后才会执行。

A

B

4

在npm scripts中设置环境变量NODE_ENV=production的写法在Windows和Linux/macOS上都能正常运行。

A

B

5

在npm scripts中使用&&连接多个命令时,如果前一个命令失败,后续命令仍会继续执行。

A

B

单选题
6

若package.json中定义了脚本"test",则其前置生命周期钩子的名称应该是什么?

A

beforetest

B

pretest

C

pre-test

D

test:pre

7

在npm scripts中访问package.json中的name字段,应该使用哪种语法?

A

$npm_package_name

B

${npm.package.name}

C

%npm_package_name%

D

npm.package.name

8

以下哪个内置生命周期事件会在执行npm start时触发?

A

prestart → start → poststart

B

prerun → start → postrun

C

preinit → start → postinit

D

只有start,没有pre和post钩子

9

以下哪个工具可以替代rm -rf实现跨平台删除目录?

A

npm-clean

B

rimraf

C

del-cli

D

cpy-cli

10

在npm scripts中实现多个脚本并行执行,以下哪种方式最常用?

A

使用&&连接多个脚本

B

使用||连接多个脚本

C

使用npm-run-all等第三方工具的--parallel选项

D

在同一个脚本中多次调用npm run

多选题
11

关于npm脚本的并行与串行执行,以下说法正确的是哪些?

A

&&用于串行执行,前一个命令成功才会执行下一个

B

并行执行时,任何一个子进程失败默认不会影响其他子进程

C

npm-run-all的--serial选项与&&效果相同

D

concurrently工具可以同时运行多个命令并统一管理输出

E

并行执行一定比串行执行效率更高

12

以下哪些是npm的内置生命周期事件?

A

preinstall

B

postinstall

C

prepare

D

prebuild

E

version

13

以下哪些npm脚本写法存在跨平台兼容性问题?

A

"clean": "rm -rf dist"

B

"build": "cross-env NODE_ENV=production webpack"

C

"copy": "cp -r src dist"

D

"dev": "NODE_ENV=development webpack serve"

E

"mkdir": "mkdirp dist"

14

关于npm生命周期钩子,以下说法正确的是哪些?

A

执行npm run build时,会依次执行prebuild、build、postbuild

B

prepare钩子在npm publish之前和npm install(不带参数)之后都会执行

C

生命周期钩子只能在package.json的scripts字段中定义

D

如果pre钩子执行失败,对应的post钩子仍然会执行

E

prepublishOnly钩子仅在npm publish时执行,npm install时不执行

15

关于npm scripts中的参数传递,以下说法正确的是哪些?

A

npm run build -- --production中的--production会传递给build脚本

B

可以通过$npm_package_version访问当前包的版本号

C

npm run build --production中的--production会传递给build脚本

D

可以通过npm_config_前缀访问.npmrc中的配置

E

多个参数需要用逗号分隔

填空题
16

在npm scripts中,使用____________连接符实现串行执行且在前一个命令失败时终止后续执行,使用____________连接符实现串行执行但无论前一个命令是否成功都会继续。

17

执行npm version patch时,内置生命周期事件的执行顺序为:____________ → version → ____________

18

在npm scripts中设置环境变量时,为了保证在Windows和Unix系统上都能正常运行,应使用____________工具;为了保证递归删除目录的跨平台兼容性,应使用____________工具。

19

在npm生命周期中,____________钩子在npm publish之前和npm install之后都会执行,而____________钩子仅在npm publish之前执行。

20

执行npm run build -- --minify时,____________是npm和脚本参数的分隔符,____________是传递给build脚本的实际参数。

参考答案
1.错误 2.正确 3.正确 4.错误 5.错误 6.B 7.A 8.A 9.B 10.C 11.A;B;C;D 12.A;B;C;E 13.A;C;D 14.A;B;E 15.A;B;D 16.&&;; 17.preversion;postversion 18.cross-env;rimraf 19.prepare;prepublishOnly 20.--;--minify
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 NPM基础概念与环境配置专题
下一个专题 → package.json文件结构专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码