我有一个NPM模块,它使用另一个包含共享代码的本地NPM模块。它们都不是公共的,这都是本地的。
我在package.json中导入共享模块,如下所示:
"my-shared": "file:../my-shared-code"
当我安装npm时,my-shared-code会被正确导入,我可以导入如下代码:
import Blah from 'my-shared/src/sharedTypes';
问题
我不得不在导入中使用单词“src”。然而,当我构建时,我创建了一个build
目录,这破坏了所有这些导入!
我想知道我是否可以使用NPM来Map导入?
我能让它完全不用“src”这个词吗?
我能做的只是:
import Blah from 'my-shared/sharedTypes';
然后它神奇地指出是使用“src”目录还是“build”目录?
我所尝试的
我查看了package.json
的选项,有一个“文件”属性,我认为可能会有帮助。然而,我认为这只是白名单文件。
我也查看了“main”属性,但是我没有“导出一个模块”。我只是有一个加载的实用程序文件,我希望能够导入到多个其他项目。
我真正想要实现的
我使用的是typescript,我有一个前端和一个后端,它们共享某些模型的类型,但也共享一些实用函数。
我希望我的typescript/react前端和我的typescript后端能够从另一个node_package导入typescript文件,但是它需要知道在开发时使用"src"
,在为生产构建时使用"build"
。
2条答案
按热度按时间5lhxktic1#
虽然这并不是您所要求的,但您可能会寻找
npm link
。它并不直观,但它正是我在上述情况下使用的。npm-link
是注册本地项目的一种方式,以便其他人可以引用它们。只是要注意,阅读文档是很重要的--使用它可能会以不明显的方式影响您的本地环境(特别是如果您直接从您的计算机构建和发布--而不是CI/CD)。dddzy1tm2#
在消费者项目中,您可以使用路径Map--〉节点/NPM如何Map导入路径
对于软件包,你可以使用
export * from './my-file'
语法,在一个index.ts
文件中重新导出(你可能在每个目录中都需要一个)。但是如果你有很多文件的话,这是很乏味的。(imperfect example)另一个解决方案似乎是制作一个脚本,将
package.json
复制到dist文件夹中,并在那里进行构建。那里也有类似的讨论:How to npm publish specific folder but as package root