Sha*_*oon 7 node.js npm typescript lerna monorepo
我有:
packages
-models
-package.json
-....
-server
-src
-index.ts
-package.json
Run Code Online (Sandbox Code Playgroud)
在我的packages/server/package.json
,我有:
"scripts": {
"dev": "ts-node src/index.ts"
},
"dependencies": {
"@myapp/models": "../models",
Run Code Online (Sandbox Code Playgroud)
在我的packages/server/src/index.ts
,我有:
import { sequelize } from '@myapp/models'
Run Code Online (Sandbox Code Playgroud)
在我的packages/models/src/index.ts
,我有:
export type UserAttributes = userAttr
export { sequelize } from './sequelize';
Run Code Online (Sandbox Code Playgroud)
但它给了我一个错误:
Try `npm install @types/myapp__models` if it exists or add a new declaration (.d.ts) file containing `declare module '@myapp/models';`
import { sequelize } from '@myapp/models'
Run Code Online (Sandbox Code Playgroud)
我如何让它正常工作?
Ján*_*šta 14
Lerna 将处理本地包之间的依赖关系,您只需确保正确设置它们即可。我建议的第一件事是去@myapp/models
并确保您package.json
包含您需要的字段:main
更重要的是types
(或者typings
如果您愿意):
// packages/models/package.json
{
// ...
"main": "dist/index.js",
"types": "dist/index.d.ts",
// ...
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我让它们都指向某个dist
文件夹,这让我想到了第二点 - 你需要构建每个包,就好像它是 monorepo 之外的一个单独的 NPM 模块一样。我并不是说您需要该dist
文件夹,在哪里构建它取决于您,您只需要确保从外部@myapp/models
公开您的文件夹main
,并且types
这些文件夹是有效的、现有的.js
和.d.ts
文件。
现在,对于最后一个难题 - 您需要声明您的@myapp/models
依赖项,就好像它是“真正的”包一样 - 您需要指定其版本而不是指向文件夹:
// packages/server/package.json
{
"dependencies": {
// ...
"@myapp/models": "0.0.1" // Put the actual version from packages/models/package.json here
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
Lerna 会注意到这是一个本地软件包,并将为您安装和链接它。
归档时间: |
|
查看次数: |
1780 次 |
最近记录: |