我有一个NPM模块,它使用另一个包含共享代码的本地NPM模块。它们都不是公共的,这些都是本地的。
我在包中导入了共享模块。Json如下:
"my-shared": "file:../my-shared-code"
当我npm install时,我的共享代码被正确导入,我可以导入如下代码:
import Blah from 'my-shared/src/sharedTypes';
我必须使用"src"在导入中。然而,当我构建时,我创建了一个build
目录,它打破了所有这些导入!
我想知道我是否可以使用NPM以某种方式映射导入?
我可以让它不需要使用"src"吗?
我可以这样做吗:
import Blah from 'my-shared/sharedTypes';
,然后它会神奇地计算出是否使用"或";build"dirs吗?
What I tried
我查看了package.json
的选项,有一个"我觉得可能有用的东西然而,我认为这只是白名单文件。
我还查看了"主"属性,但是我并没有导出一个模块。我只是有一堆实用程序文件,我想把它们导入到其他多个项目中。
我想要达到的效果
我正在使用typescript,我有一个前端和后端,它们共享某些模型的类型,但也共享一些实用程序函数。
我希望我的typescript/react前端和我的typescript后端能够从另一个node_package导入typescript文件,但是它需要知道使用"src"
进行开发和"build"
时构建生产。
虽然这不是你想要的,但你可能正在寻找npm link
。这不是直观的,但这是我在你上面的情况下使用的。
npm-link
是一种注册本地项目的方式,以便其他人可以引用它们。只是要注意,阅读文档很重要——使用它可能会以不明显的方式影响您的本地环境(特别是如果您直接从您的机器构建和发布——而不是CI/CD)。
在消费者项目中,你可以使用路径映射——>https://www.typescriptlang.org/docs/handbook/module-resolution.html路径映射
对于包,您可以使用export * from './my-file'
语法在index.ts
文件中重新导出(您可能在每个目录中都需要一个)。但是如果你有很多文件,这就很乏味了。(不完全)
另一个解决方案似乎是制作一个脚本将package.json
复制到dist文件夹并在那里进行构建。
有一个类似的讨论:如何npm发布特定的文件夹,但作为包根