【问题标题】:Using a library sibling folder container for shared packages为共享包使用库同级文件夹容器
【发布时间】:2018-10-18 19:52:15
【问题描述】:

我在一个单一的 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/"
  }
}

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

【问题讨论】:

    标签: javascript typescript npm yarnpkg


    【解决方案1】:

    我需要了解更多关于每个 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

    【讨论】:

    • Lerna 解决了这个问题。我要写,因为它对我来说仍然不明显:)。
    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 2023-03-07
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多