小编Jer*_*son的帖子

将 Peer 依赖与本地 (file:../some-lib) 依赖一起使用

我有一个包含许多微服务的 monorepo。我想让任何需要它的微服务都可以使用一些库类型的函数/类。但是,如果该库包声明了对等依赖项,则在从依赖于该库的事物中运行代码时将找不到对等依赖项。

考虑这个回购结构:

    • some-library (peerDepends on foo)
      • index.js(需要foo
      • node_modules 将为空
  • 服务
    • some-service(取决于foo, 和some-library
      • index.js(需要some-library
      • node_modules 将具有:
      • foo
      • some-library 将是一个符号链接 ../../lib/some-library

运行时node services/some-service/index.js,您将收到错误“无法找到模块 'foo'”,来自lib/some-library/index.js.

可能发生这种情况是因为节点只查看祖先目录中的lib/some-library/node_modules任何node_modules文件夹。但是由于此代码是从services/some-service(作为工作目录)运行的,并且由于 中的符号链接services/some-service/node_modules,我希望它可以工作。

这是一个您可以轻松克隆以查看问题的存储库:https : //github.com/jthomerson/example-local-dependency-problem

git clone git@github.com:jthomerson/example-local-dependency-problem.git    
cd example-local-dependency-problem    
cd services/some-service    
npm install    
node index.js    
Run Code Online (Sandbox Code Playgroud)

我只看到两种解决方案:

  • 不要在库中使用 peerDependencies
  • 为了本地开发和测试,在项目的根目录安装每个对等依赖项。

这些都不是一个真正好的解决方案,因为它不允许每个服务具有不同版本的依赖项,因此意味着如果依赖项的本地版本(或库的版本)被碰撞,所有使用该库的服务然后让它们的依赖版本同时发生碰撞,这使得它们更加脆弱,因为它们都被捆绑在一起。

node.js npm monorepo peer-dependencies

7
推荐指数
1
解决办法
1656
查看次数

Git repo:内部和开源外部分支

为公司内部使用的项目设置 git repo 的最佳方法是什么,但您也想开源(但可能会修改历史)?

假设 Acme 公司有一个回购“supercoolproject”。他们想要开源它,但他们实际上根本不想要与它相关联的公司名称。他们以开发人员的名字(或组等)设置了一个 GitHub 帐户,并创建了存储库。他们将其克隆到内部 Acme 服务器。没有提到“Acme”。

现在问题来了——在任何给定的组织中,都有了解开源并被授权将一些代码公开的开发人员。还有其他人不了解所有细微差别。当其中之一进行提交时,可能会包含公司名称或其他一些专有信息。或者,他们只是做了一个可以在内部恢复的可怕的提交(不是重写历史——我只是在谈论添加一个“恢复”提交)。但是,您不希望这些专有提交进入开源分支。

因此,您创建了“acme_internal_{dev,qa,production}”分支和一个外部“master”分支(也可能是其他分支)。保持这些同步的最佳方法是什么?您希望接受对开源存储库的提交。并且您想推送(大部分)您的内部提交。但是有一些是不应该出去的。

似乎合并 internal -> external 是一件坏事,因为您无法删除错误的提交。可以在内部分支上重新设置外部分支,但似乎一旦您“git rebase -i acme/acme_internal_dev”一次并修改历史记录(更改提交消息、删除提交等),您就不能再重新设置基准,因为两个历史背道而驰。那么,您是否最终将所有内部提交都挑选到公共分支,然后将公共分支合并到内部树中?这看起来也很丑陋,因为您最终会在内部重复提交(原始提交,然后是精心挑选的进入外部并合并回内部的提交)。

出于这个问题的目的,让我们假设 Acme 在内部希望避免在其内部分支上重写历史记录(实际上是删除/修改错误提交)。

git merge open-source rebase git-rebase

5
推荐指数
1
解决办法
1437
查看次数

GraphViz - 如何使子图包含形状?

我有一个图表,代表一个由两个较小的流程组成的大型流程.每个较小的过程由子图表示.但是当我将其中一个子进程的末尾(比如说"一个")连接到另一个进程的开头("两个")时,另一个进程("两个")的起始形状最终会在与结束"一".如何从一个箭头指向箭头指向两个开头,但是在其簇中保持两个的起始形状?

digraph BigProcess {
   graph [ label="Some big process" ]

   subgraph clusterSubProcess1 {
      graph [ label="Subprocess one", color="red" ]

      start1_1 -> start1_2;
      start1_2 -> start1_3a;
      start1_2 -> start1_3b;
      start1_3a -> start1_4;
      start1_3b -> start1_5;
      start1_4 -> start1_1;
      start1_5 -> start2_1;

   }

   subgraph clusterSubProcess2 {
      graph [ label="Subprocess two", color="blue" ]

      start2_1 -> start2_2;
      start2_2 -> start2_3a;
      start2_2 -> start2_3b;
      start2_3a -> start2_4;
      start2_3b -> start2_5;
      start2_4 -> start2_1;
      start2_5 -> end1;

   }
}
Run Code Online (Sandbox Code Playgroud)

这导致以下结果,我真的希望start2_1成为蓝色有界框内的顶级节点.

这张图

dot graphviz digraphs

3
推荐指数
1
解决办法
2044
查看次数

JSON模式:为什么“常量”不能以与单值“枚举”相同的方式进行验证?

我有一个对象,提供一种资产版本的审核日志。它的几个属性(versionSource.metadataversionSource.files)是应根据两个架构之一验证的对象,具体取决于其架构之一的值。我开始在子方案中使用一个常量(在中oneOf,但那是说所有子方案都已验证(因此打破了oneOf多个已验证的方案。不过,将其更改为单值枚举是可行的)。

为什么验证有所不同?

这是原始架构:

{
   "$id": "https://example.com/schemas/asset-version.json",
   "title": "Audit log of asset versions",
   "$schema": "http://json-schema.org/draft-07/schema",

   "type": "object",
   "required": [
      "assetID",
      "version",
      "versionSource"
   ],

   "properties": {
      "assetID": {
         "type": "string"
      },
      "version": {
         "type": "integer",
         "minimum": 1
      },
      "versionSource": {
         "type": "object",
         "properties": {
            "metadata": {
               "type": "object",
               "oneOf": [
                  {
                     "properties": {
                        "sourceType": { "constant": "client" }
                     }
                  },
                  {
                     "$ref": "#/definitions/version-source-previous-version"
                  }
               ]
            },
            "files": {
               "type": "object",
               "oneOf": [
                  {
                     "properties": …
Run Code Online (Sandbox Code Playgroud)

json jsonschema

2
推荐指数
2
解决办法
3062
查看次数