【问题标题】:Built-in nodejs path aliasing and implied index.js module resolution内置 nodejs 路径别名和隐含 index.js 模块解析
【发布时间】:2022-01-06 19:54:03
【问题描述】:

我想在 typescript/node/express 项目中设置导入路径别名,而不使用其他包,如 tsconfig-paths 和 link-module-alias。我想使用内置的 nodejs 功能来做到这一点(Typscript 别名已经完成)。

基本上:

// Change
import { myFn } from '../../../utils';

// To
import { myFn } from '#this/utils';

我的一线希望是节点的subpath imports。从理论上讲,我可以将其添加到我的package.json

"imports": {
    "#this/*": "./dist/*"
}

问题来了

这适用于显式导入*.js 文件,但对于隐含的index.js(即Folders as modules)确实会失败

// Works
import { myFn } from '#this/utils/index.js';

// Does not work
import { myFn } from '#this/utils';

但是,我希望节点能够像这样解析导入:

  • 如果 utils 是一个目录,导入应该解析为*/utils/index.js
  • 如果 utils 是一个文件,导入应该解析为*/utils.js

我的第一个想法是更新 package.json 导入以包含所有可能性,但这不受支持:

"imports": {
    "#this/*": [
        "./dist/*",
        "./dist/*.js",
        "./dist/*/index.js"
    ]
}

另一个选项似乎是为每个目录定义一个exports 条目,但这是不可扩展的。

【问题讨论】:

    标签: javascript node.js typescript


    【解决方案1】:

    使用--experimental-specifier-resolution=node 标记下面的代码对我有用。

    index.js:

    import { myFn } from '#this';
    

    package.json:

    ...
      "imports": {
        "#this": "./utils"
      }
    ...
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 1970-01-01
      • 2022-01-04
      • 2017-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多