在npm发布上更改根目录

我可以在发布时更改Node.js npm包的根目录吗? 我拥有的是以下内容:

├── lib ├── package.json ├── .npmignore ├── src │  ├── index.js │  └── sub │  └── mymodule.js └── test 

In /src是我所有的ES2015源代码。 我用Babel将其转录到我的/lib目录中。 我的package.jsonmain指向lib/index.js 。 之后,我可以做一个npm publish (我的.npmignore设置为src所以只有lib将被发布)。 现在我的包被部署到npmjs.com,在另一个包中,我可以用import index from 'mypackage'来导入它。

到现在为止还挺好。 但是如果我想直接导入sub/mymodule.js呢? 我必须import mymodule from 'mypackage/lib/sub/mymodule'编写import mymodule from 'mypackage/lib/sub/mymodule' 。 我真正想要的是import mymodule from 'mypackage/sub/mymodule'没有/lib/在我的path中import mymodule from 'mypackage/sub/mymodule'

我怎样才能做到这一点? npm文档中提到了我可以在package.json设置的directories.lib ,但它似乎会被完全忽略。 我把它设置为./lib但它什么都不做。

你可以使用npm publish lib来发布你的/lib目录。 请记住在发布之前将您的package.json文件复制到lib目录。

build议使用npm脚本:

"scripts": { "build": "babel src --out-dir lib", "prepublish": "npm run build && cp ./package.json lib" }

我也一直在经历同样的痛苦。 经过大量的游戏后,我得到了一个基于这个post的答案:

 "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "lint": "eslint src/**", "build": "rm -rf ./lib/* && babel src -d lib -s && cp ./package.json lib", "prepublish": "[[ \"$PWD\" =~ YOUR_DIR_HERE/lib ]]", "pub": "pushd ./ && npm run build && cd lib && npm publish && popd" } 

这意味着当不在lib目录中时,“npm publish”将会失败,从而防止错误的部署。 我不喜欢使用自定义的“npm run pub”,但这是我现在能够想到的最好的解决scheme。