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.json
到 lib
目录下,然后在 lib
下 npm publish
。这种方案最终输出到 npm 上的文件也更少,省得再写 .npmignore
了。目前来看,兼容性更强一些。