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
了。目前来看,兼容性更强一些。