【问题标题】:Importing files in node package without including dist folder name在节点包中导入文件而不包括 dist 文件夹名称
【发布时间】:2021-10-24 08:26:36
【问题描述】:

我有一个库的以下目录结构,它将由其他节点 js 项目导入。

my-lib/
├─ dist/
│  ├─ index.js
│  ├─ foo.js
├─ src/
│  ├─ index.ts
│  ├─ foo.ts
├─ package.json

我有以下 package.json

{
  "name": "my-lib",
  "version": "1.0.0",
  "description": "",
  "main": "dist/index.js"
}

我已经将main指定为dist/index.js,所以如果我理解正确的话,从index.ts(js)导出的成员可以导入为import abc from 'my-lib'。如果我必须从 foo.ts (js) 文件中访问导出的成员,那么我最终可能会做import foo from 'my-lib/dist/foo'。所以这里我必须在导入路径中指定dist 文件夹名称。有没有办法只指定'my-lib/foo' 省略dist 文件夹名称? (就像导入dist/index.js 文件一样。)

【问题讨论】:

    标签: node.js typescript npm


    【解决方案1】:

    这可以通过 package.json 中的subpath exports 来完成。

      "main": "./dist/index.js",
      "exports": {
        ".": "./dist/index.js",
        "./foo": "./dist/foo.js"
      }
    

    【讨论】:

      【解决方案2】:

      如 node.js 文档中所述,可以添加子路径导出。看看here

      在您的情况下,它应该类似于以下内容

      {
        "name": "my-lib",
        "version": "1.0.0",
        "description": "",
        "main": "./dist/index.js",
        "exports": {
          ".": "./dist/index.js",
          "./foo": "./dist/foo.js"
        }
      }
      

      这样导出后可以如下导入

      import foo from 'my-lib/foo'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 1970-01-01
        • 2019-06-19
        • 2017-12-14
        • 2019-08-15
        相关资源
        最近更新 更多