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

模块解析机制专题

专题说明

本专题深入解析Node.js模块解析机制,包括node_modules逐级查找规则、exports条件导出配置、多环境入口字段区分以及TypeScript类型定义支持。

学习目标

  1. 理解require的解析路径与node_modules逐级查找机制
  2. 掌握package.json exports字段的条件导出配置
  3. 能区分main/module/browser在不同环境下的入口选择
  4. 学会配置types字段支持TypeScript类型推断

学习内容

  • 模块查找规则:require解析路径、逐级查找
  • exports条件导出:条件导出配置、子路径导出
  • 入口字段:main/module/browser的区别与优先级
  • TypeScript支持:types字段、类型定义入口

学习建议

  1. 理解node_modules查找规则有助于调试模块加载问题
  2. exports字段是现代包开发的推荐做法,优于main
  3. 同时提供main和module入口以兼容CommonJS和ESM

📝 配套习题(15 题)

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

package.json中的typings字段和types字段功能不同,typings用于旧版本TypeScript兼容。

A

B

2

当require('lodash')时,Node.js只会查找当前目录下的node_modules/lodash。

A

B

3

package.json中的module字段是Node.js官方定义的标准字段。

A

B

单选题
4

当require('./utils')时,Node.js的查找顺序是什么?

A

./utils → ./utils.js → ./utils.json → ./utils/index.js

B

./utils.js → ./utils.json → ./utils → ./utils/index.js

C

./utils → ./utils.js → ./utils/index.js → ./utils.json

D

./utils.js → ./utils → ./utils.json → ./utils/index.js

5

在package.json中配置了以下exports字段:

JSON
{
  "exports": {
    ".": {
      "import": "./dist/esm/index.js",
      "require": "./dist/cjs/index.js",
      "default": "./dist/index.js"
    }
  }
}

当使用import语法引入该包时,实际加载的是哪个文件?

A

./dist/esm/index.js

B

./dist/cjs/index.js

C

./dist/index.js

D

由main字段决定

6

当package.json同时存在main、module和browser字段时,webpack的默认解析优先级是什么?

A

main > module > browser

B

browser > module > main

C

module > browser > main

D

main > browser > module

7

当package.json同时存在exports字段的"types"条件和顶层types字段时,TypeScript优先使用哪个?

A

优先使用顶层types字段

B

优先使用exports中的"types"条件

C

两者合并使用

D

报错提示配置冲突

多选题
8

关于Node.js模块查找规则,以下说法正确的是哪些?

A

核心模块(如fs、path)优先级最高,不会被同名npm包覆盖

B

require会逐级向上查找node_modules目录直到根目录

C

NODE_PATH环境变量指定的目录也会被搜索

D

require的缓存机制意味着同一模块只会被加载一次

E

绝对路径导入时,Node.js会将其转换为相对路径再查找

9

关于package.json中的exports字段,以下说法正确的是哪些?

A

定义exports后,未在exports中声明的子路径无法被外部导入

B

exports支持"types"条件用于TypeScript类型解析

C

exports中的条件匹配顺序是从上到下,第一个匹配的条件生效

D

exports和main字段可以同时存在且互不干扰

E

exports只能定义包的主入口,不能定义子路径导出

10

关于TypeScript的类型定义解析,以下说法正确的是哪些?

A

types字段指定的文件必须是.d.ts格式

B

如果没有types字段,TypeScript会在包根目录查找index.d.ts

C

exports中的"types"条件必须写在其他条件之前

D

可以在exports中为不同子路径指定不同的类型定义文件

E

类型定义文件不影响运行时代码的执行

11

关于package.json中的入口字段,以下说法正确的是哪些?

A

main字段是Node.js官方标准,用于指定CommonJS入口

B

module字段是社区约定,用于指定ES模块入口

C

browser字段用于指定浏览器环境下的入口或模块替换

D

Node.js原生支持module字段的解析

E

exports字段优先级高于main字段

填空题
12

Node.js在解析require('foo')时,会从当前文件的目录开始,逐级向上查找____________目录中的foo包,直到____________目录为止。

13

在package.json中,____________字段指定CommonJS入口,____________字段指定ES模块入口(社区约定),____________字段指定浏览器环境入口。

14

当package.json中定义了exports字段后,未在exports中声明的子路径将无法被外部____________。这种特性称为exports的____________性。

15

TypeScript解析包的类型定义时,优先级从高到低为:exports中的____________条件 > 顶层____________字段 > 包根目录的____________文件。

参考答案
1.错误 2.错误 3.错误 4.A 5.A 6.B 7.B 8.A;B;C;D 9.A;B;C 10.A;B;D;E 11.A;B;C;E 12.node_modules;根 13.main;module;browser 14.导入/引入/require/import;封装 15.types;types;index.d.ts
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 性能优化与缓存策略专题
下一个专题 → 版本号规则与发布基础专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码