我最近向NPM发布了一个私有模块,它有一些我们在一些服务中使用的通用代码。
代码是用ES6编写的,因此我们需要在发布到NPM之前使用babel进行转换。我有一个预发布脚本,将src
转换为lib
。
此模块中没有index.js
文件,因为它只是一些常用代码。
我遇到的问题是,当我从NPM安装模块时,使用require('@ourorg/ourmodule/somecode')
不起作用(无法找到模块)。我不得不使用require('@ourorg/ourmodule/lib/somecode')
。
我已尝试将main
中的package.json
字段更改为lib
的多种变体,但除非我包含index.js
文件,否则它似乎无效在这种情况下require('@ourorg/ourmodule')
返回在那里导出的任何内容。我可以看到的一个解决方法是导出index.js
文件中的所有公共代码,但这根本不可维护。
答案 0 :(得分:3)
package.json
中的index.js
字段遵循与普通节点导入相同的规则 - 特别是它应指向单个文件,或者它可以指向具有{{1}的目录在它里面。
据我所知,没有办法让你的包只是一个目录的别名。如果有,require("@ourorg/ourmodule")
会返回什么?
如果你每次导入某些内容时都必须输入lib
,这绝对让你疯狂,也许你可以在你的构建过程中添加一个步骤来自动生成一个index.js
,它会在根目录下重新导出所有内容?