【问题标题】:Resolution for require('module/subpath')require('module/subpath') 的分辨率
【发布时间】:2018-07-02 11:05:00
【问题描述】:
node如何解析require('my-module/subpath')和import * from 'my-module/subpath'?
这总是会解析为 my-module 中的 subpath.js 或 subpath/index.js,还是会在其他地方查找?
是否可以配置my-module 使require('my-module/subpath') 或import * from 'my-module/subpath' 解析为lib\subpath\index.js?
【问题讨论】:
标签:
node.js
import
require
node-modules
【解决方案1】:
node如何解析require('my-module/subpath')和import * from 'my-module/subpath'?
无论使用require还是import,my-module/subpath都会解析为node_modules/my-module/subpath
它将在那里搜索:
subpath.js
-
package.json 及其 main 字段(用于 commonjs)或 module(用于 esm)。
-
index.js。
有关全面(尽管很长)的指南,请参阅typescript documentation 中的node resolution 部分。
注意: 大多数包不是以my-module/subpath 格式分发的,而是在package.json 中使用main 或module。 Material-ui 是一个例外,它用于 esm 导出(请参阅 guide)。
是否可以配置 my-module 以便 require('my-module/subpath') 或 import * from 'my-module/subpath' 解析为 lib\subpath\index.js?
几乎所有相关工具都提供了一种通过别名更改模块分辨率的方法。如何实现这一点取决于您使用的工具:
- babel(来自
babel-plugin-module-resolver)
- webpack(通过
resolve.alias 属性)
- typescript/VSCode(在
tsconfig 中称为 paths)
- eslint (来自
eslint-plugin-import
等等