要求的分辨率('模块/子路径')

时间:2018-01-23 15:10:14

标签: node.js import require node-modules

节点如何解析require('my-module/subpath')import * from 'my-module/subpath'

这总是会解析为my-module中的subpath.jssubpath/index.js,还是会在其他地方找到?

是否可以配置my-module以便require('my-module/subpath')import * from 'my-module/subpath'解析为lib\subpath\index.js

1 个答案:

答案 0 :(得分:0)

  

节点如何解析require('my-module / subpath')并从'my-module / subpath'导入*?

无论使用require还是importmy-module/subpath都将解析为node_modules/my-module/subpath

它将在其中搜索:

  1. subpath.js
  2. package.json及其main字段(对于commonjs)或module(对于esm)。
  3. index.js

有关全面(尽管很长)的指南,请参见typescript documentation中的node resolution部分。

注意:大多数软件包不是以my-module/subpath格式分发,而是使用main中的modulepackage.jsonMaterial-ui是一个例外,它对esm导出是这样做的(请参阅guide)。

  

是否可以配置my-module,以便require('my-module / subpath')或从*'my-module / subpath'导入*解析为lib \ subpath \ index.js?

几乎所有相关工具都提供了一种通过别名更改模块分辨率的方法。如何实现该目标取决于您使用的工具:

  • babel(通过babel-plugin-module-resolver
  • webpack(通过resolve.alias属性)
  • typescript / VSCode(在paths中称为tsconfig的地方)
  • eslint(通过eslint-plugin-import