在没有 index.js 的情况下更改 NPM 入口点

Rhy*_*amm 5 javascript node.js npm

我最近向 NPM 发布了一个私有模块,其中包含一些我们在一些服务中使用的通用代码。

代码是用 ES6 编写的,所以我们需要在发布到 NPM 之前使用 babel 对其进行转换。我有一个预发布脚本,可以转换srclib.

index.js此模块中没有文件,因为它只是一些通用代码。

我遇到的问题是,当我从 NPM 安装模块时,使用require('@ourorg/ourmodule/somecode')不起作用(找不到模块)。相反,我必须使用require('@ourorg/ourmodule/lib/somecode').

我尝试将main字段更改package.json为 的许多变体lib,但除非我包含index.js文件,否则它似乎不起作用,在这种情况下,require('@ourorg/ourmodule')返回导出到那里的任何内容。我可以看到的一种解决方法是将所有通用代码导出到一个index.js文件中,但这根本无法维护。

Joe*_*lay 4

mainin 中的字段遵循package.json与普通 Node 导入相同的规则 - 它应该指向特定的单个文件,或者它可以指向其中包含 的目录index.js

据我所知,没有办法让导入包只是目录的别名。如果有的话,会require("@ourorg/ourmodule")返回什么?

lib如果每次导入某些内容时都必须输入,这绝对会让您发疯,也许您可​​以在构建过程中添加一个步骤,自动生成一个index.js重新导出根目录下的所有内容的步骤?

  • 似乎应该有一种更简单的方法来做到这一点?我们当然不可能是第一个想要将一些通用代码作为依赖项的人。如果我在 require 语句中包含“/lib/”,即使根文件夹没有“index.js”,该模块也会按预期工作。真的没有办法说“不查看项目根目录,而是查看此文件夹”吗? (3认同)