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

包开发与发布进阶专题

专题说明

本专题聚焦NPM包开发与发布的进阶技巧,包括本地调试、发布内容控制、打包测试、命名空间管理、权限控制与多版本分发标签。

学习目标

  1. 掌握npm link创建全局软链接进行本地调试
  2. 理解files字段白名单控制发布内容
  3. 学会使用npm pack本地打包验证
  4. 掌握scoped包命名空间与权限管理
  5. 理解dist-tag多版本分发标签的用法

学习内容

  • npm link:全局软链接、本地开发包引用
  • files字段:白名单配置、发布内容控制
  • npm pack:本地打包tgz、内容完整性验证
  • scoped包:@scope/name格式、私有作用域
  • npm access:访问权限管理、团队协作
  • npm dist-tag:latest/next/beta标签管理

学习建议

  1. 开发阶段用npm link实现实时调试,提升开发效率
  2. 发布前务必用npm pack --dry-run预览发布内容
  3. scoped包是企业级开发的标配,建议尽早掌握

📝 配套习题(24 题)

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

所有scoped包(以@开头的包)默认都是私有的,必须付费才能发布为公开包。

A

B

2

npm dist-tag与git tag是完全相同的概念,都是指向特定提交的标签。

A

B

3

package.json中的files字段指定的文件,即使被.npmignore排除,也会被包含在发布包中。

A

B

4

npm link在本地创建的是包的完整副本,而非符号链接。

A

B

5

npm pack生成的压缩包中包含的文件与npm publish时发布的文件完全一致。

A

B

6

npm access命令可以管理非scoped包的访问权限。

A

B

单选题
7

使用npm link进行本地调试时,正确的操作顺序是什么?

A

先在目标项目执行npm link <包名>,再在源包目录执行npm link

B

先在源包目录执行npm link,再在目标项目执行npm link <包名>

C

在任意目录执行npm link <包名>即可

D

两个命令需要在同一个目录下执行

8

执行npm publish时,默认会将新版本打上哪个dist-tag?

A

stable

B

latest

C

next

D

release

9

如果package.json中没有声明files字段,npm publish会包含哪些文件?

A

只包含package.json和README.md

B

包含除.npmignore排除外的所有文件

C

只包含src目录下的文件

D

不发布任何文件,必须显式声明files

10

将scoped包@myorg/my-package设置为公开访问,正确的命令是什么?

A

npm access public @myorg/my-package

B

npm access set public @myorg/my-package

C

npm access set access=public @myorg/my-package

D

npm publish --access public @myorg/my-package

11

npm pack命令生成的文件格式和命名规则是什么?

A

<name>.zip,其中name是package.json中的name字段

B

<name>-<version>.tgz,包含包名和版本号

C

<name>-<version>.tar.gz,使用完整的tar.gz扩展名

D

package.tgz,固定文件名

12

scoped包的命名格式是什么?

A

@scope/package-name

B

scope/package-name

C

package-name@scope

D

package-name::scope

多选题
13

关于files字段,以下说法正确的是哪些?

A

package.json始终会被包含在发布包中,无需在files中声明

B

README.md和CHANGELOG文件也会被自动包含

C

files字段支持使用通配符如"src/**/*"

D

node_modules目录即使写在files中也不会被包含

E

.gitignore中的规则与files字段完全独立互不影响

14

关于scoped包,以下说法正确的是哪些?

A

scoped包可以避免与同名非scoped包的命名冲突

B

安装scoped包需要使用完整名称,如npm install @scope/package

C

scoped包只能由scope对应的组织成员发布

D

同一scope下的所有包默认共享访问权限

E

非scoped包(如lodash)也可以被任何人发布到任意scope下

15

关于npm pack,以下说法正确的是哪些?

A

可以使用npm pack --dry-run预览将要包含的文件而不实际生成压缩包

B

npm pack生成的压缩包可以直接通过npm install安装

C

npm pack不会执行prepare等生命周期钩子

D

可以指定打包特定的包:npm pack <package-spec>

E

npm pack是发布前验证包内容的重要工具

16

关于npm access命令的功能,以下说法正确的是哪些?

A

npm access list可以查看包的权限列表

B

npm access grant可以给团队成员授予包的读写权限

C

npm access revoke可以撤销团队成员的包权限

D

npm access 2fa-required可以要求发布包时必须启用双因素认证

E

npm access命令可以管理任意npm包的权限

17

关于npm link的使用,以下说法正确的是哪些?

A

npm link修改源码后目标项目无需重新安装即可生效

B

npm link可能导致peer依赖行为与实际发布后不一致

C

npm unlink可以取消链接

D

npm link会同时链接包的devDependencies

E

在Windows上npm link可能因权限问题而失败

18

关于npm dist-tag,以下说法正确的是哪些?

A

npm dist-tag add <pkg>@<version> <tag>可以为已发布版本添加标签

B

npm dist-tag rm <pkg> <tag>可以删除一个标签

C

删除latest标签后,npm install将无法安装该包

D

常见的标签用途:latest表示稳定版,next/beta表示预发布版

E

一个版本只能拥有一个dist-tag

填空题
19

使用npm pack的____________参数可以仅预览将要包含的文件列表而不实际生成压缩包,这有助于在发布前验证包内容是否正确。

20

首次发布scoped包时,需要添加____________参数将其设为公开包,否则默认会发布为____________包。

21

npm发布时文件包含的优先级机制为:____________字段以白名单方式指定要包含的文件,____________文件以黑名单方式排除文件,若不存在该排除文件则回退使用____________文件的规则。

22

scoped包的访问级别可以设置为____________(仅授权用户可访问)或____________(所有人可访问)。

23

取消npm link的链接时,需要在目标项目中执行____________命令移除链接包,然后执行____________命令安装原始版本的包。

24

发布预发布版本(如2.0.0-beta.1)时,应使用npm publish --tag ____________命令,以避免该版本成为____________标签指向的默认安装版本。

参考答案
1.错误 2.错误 3.错误 4.错误 5.正确 6.错误 7.B 8.B 9.B 10.C 11.B 12.A 13.A;B;C;D 14.A;B;C 15.A;B;D;E 16.A;B;C;D 17.A;B;C;E 18.A;B;D 19.--dry-run 20.--access public;私有 21.files;.npmignore;.gitignore 22.restricted;public 23.npm unlink <包名>;npm install 24.next;latest
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 依赖管理深入专题
下一个专题 → 包生命周期与钩子机制专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码