将库同级文件夹容器用于共享包

Using a library sibling folder container for shared packages

我在单声道 git 存储库中有很多应用程序。我想在我的应用程序之间共享一些库。

这是我的目录结构:

.
├── libs
│   └── messages
|       ├── package.json
|       ├── src
|       ├── tsconfig.json
|       └── ...all other good things for a library
├── main
│   ├── config
│   ├── dist
│   ├── node_modules
│   ├── package.json
│   ├── package-lock.json
│   ├── src
│   └── tsconfig.json
├── README.md
└── server
    ├── main.ts
    ├── node_modules
    ├── package.json
    ├── package-lock.json
    ├── setupEnvVars.js
    ├── src
    └── tsconfig.json

我想将库 "message" 添加到我的项目 "main" 所以我尝试以这种方式添加它:

{
  "name": "me",
  "version": "1.0.0",
  "main": "index.js",
  "private": true,
  "dependencies": {
    "@me/messages": "../libs/messages/"
  }
}

我卡住了,因为它不起作用(但也不会抛出错误)。你能帮助我吗?谢谢!

我需要更多地了解每个 package.json 文件的内容和整个项目,但这里有一些元素可能会帮助您获得一个 goo 结构,以完成您为自己设定的目标做。

如果你真的想走正确的 monorepo 方式,你可能想看看 https://github.com/lerna/lerna 这对 Node 8 及更高版本来说已经足够好了(例如文件依赖的自动符号链接,这是在开发过程中很有用)。

在 TypeScript 中解决此问题的另一种方法是使用路径:

tsconfig.json

{
  "compilerOptions": {
    // path
    "baseUrl": ".",
    "paths": {
        "@lib/*": ["./*"],
        "@shared/*": ["../shared/*"]
    }
}

但是,根据您构建和 运行 项目的方式,路径有时无法正确处理。如果您 运行 您的项目使用 ts-node,您可能需要使用 tsconfig-paths,或者如果您使用 TypeScript 作为 webpack 项目的一部分,则可能需要 tsconfig-paths-webpack-plugin