1

npm 包如何支持子路径?

目前看到了两种做法。

redux-saga

一种是像 redux-saga/effects 一样,其实际的资源文件在 lib/cjs/effects 下,但在根目录下放置一个同名的 effects 目录,目录下放置一个 package.json,相当于软链接一般,将 redux-saga/effects 视为一个私有库,由 main: ../lib/cjs/effects 指向实际的代码所在。 最终,以根目录下的 package.json 为基准,将此包发布出去。
npm 通过 npmFileMap 能够正常处理此种类型的库,但是像 gulp 等需要解析 node_modules 文件的可能会查找失败。

root/package.json

{
  "npmName": "redux-saga",
  "npmFileMap": [
    {
      "basePath": "/dist/",
      "files": [
        "*.js"
      ]
    }
  ]
}

effects/package.json

{
  "name": "redux-saga/effects",
  "private": true,
  "main": "../lib/effects.js",
  "module": "../es/effects.js",
  "jsnext:main": "../es/effects.js"
}

rxjs

另外一种是类似于 rxjs/operators 的方案,当 build 出 lib 目录后,直接复制一份 package.jsonlib 目录下,然后在 libnpm publish。这种方案最终输出到 npm 上的文件也更少,省得再写 .npmignore 了。目前来看,兼容性更强一些。


tinkgu
503 声望20 粉丝

{{user.signature}}