将Lerna与未发布的包一起使用

将Lerna与未发布的包一起使用,lerna,Lerna,我正试图和勒娜建立我的monorepo。计划是通过提取代码块来重构现有项目,这些代码块应该是他们自己的包。我已经运行了lerna init,当前的设置如下所示: project/ packages/ new-refactored-package/ package.json prior-existing-project/ package.json { "dependencies" : { "new-refactored-package"

我正试图和勒娜建立我的monorepo。计划是通过提取代码块来重构现有项目,这些代码块应该是他们自己的包。我已经运行了
lerna init
,当前的设置如下所示:

project/
  packages/
    new-refactored-package/
      package.json
    prior-existing-project/
      package.json
        { "dependencies" : { "new-refactored-package" : "latest" } }
  package.json
    {
      "devDependencies": {
        "lerna": "^2.0.0-rc.5"
      }
    }
  lerna.json
    {
      "lerna": "2.0.0-rc.5",
      "packages": [
        "packages/*"
      ],
      "version": "0.0.0"
    }
我的理解是,
lerna bootstrap
此时应该在项目中定位
package1
,并将其符号链接到先前现有项目的
/node\u模块/新重构包/
。发件人:

引导当前Lerna repo中的包。安装其所有依赖项并链接任何交叉依赖项

运行时,此命令将:

  • npm安装每个包的所有外部依赖项
  • 将相互依赖的所有Lerna软件包符号链接在一起。
  • npm预发布所有引导包
然而,当我运行它时,lerna尝试安装新的重构包:

npm错误!404注册表返回404以便登录


我误解了吗?我是否必须首先将依赖的软件包发布到
npm

lerna bootstrap
将对可用的软件包进行符号链接而不是安装

在您的情况下,我认为lerna找不到包的正确
版本
名称

以下是我在我的项目中所做的

project
- packages/
    - a_pkg
        - package.json {
            "name": "@scope/a_pkg",
            "version": "0.0.1",
            "private": true
            /// opt out
        }
    - b_pkg
        - package.json {
            "name": "@scope/b_pkg",
            "version": "0.0.1",
            "private": true,
            "dependencies": {
              "@scope/a_pkg": "^0"
            },
            /// opt out
        }
- package.json
- lerna.json {
    "packages": [
        "packages/*"
    ],
    /// opt out
}

package.json中的包名称必须与/packages folder中的文件夹名称匹配

(本质上是@kp_ping所说的)

要求 对于
lerna
在运行本地包时对本地包进行符号链接,本地包必须具有匹配的
名称
版本
。每当
lerna
无法将依赖项与本地软件包匹配时,它将尝试从注册表安装该软件包

因此,请确保依赖项包的版本可以与依赖项中的版本匹配

例子
alpha
rc
beta
即使是
*
也不会匹配标记为预发布的版本,因此如果您为本地包提供类似
0.0.1-alpha.0
1.0.0-rc.3
的版本,它也不会在本地进行符号链接

private:true

虽然它不会影响
lerna bootstrap
,但值得一提的是,您不希望发布的包应该始终具有
private:true。这将确保不会发布它。

lerna bootstrap
将检查您在
package.json
package lock.json
中指定的包版本

由于您尚未发布您的作品,我将尝试在
引导
命令上使用
--force local


lerna引导——强制本地

我也有同样的问题!文档对未发布的包和链接具有误导性。我希望有人能在这里帮助我们。私钥和版本密钥是否重要?依赖项(
a_pkg
)中需要该版本,以便lerna能够确保正确的版本。依赖项(
b_pkg
)在技术上不需要引导版本才能在此场景中工作。
private:true
主要对
lerna publish
有影响,因此不会尝试将包发布到NPM。引导不需要该文件夹。该文件夹不需要与包名匹配。依赖项必须具有正确的名称,并且必须具有可匹配的
版本。我不明白为什么
npm I我的本地-package@1.0.0
在手动将其添加到
package时,给了我这个错误。json
有效。@EricBurel您不能用
npm
安装本地包。如果包在本地可用,那么将其添加到package.json中,然后运行
lerna bootstrap
就可以了。但npm不支持本地软件包,也不能从lernas功能中获益。要添加远程(已发布的包)或本地(在lerna工作区中)的包,可以使用
lerna add my local-package@1.0.0要在
@oBusk中安装的软件包/应用程序这是否意味着一旦我添加了本地软件包作为依赖项,我将无法再运行
npm安装
npm卸载
,因为他们将因
npm错误而失败!404未找到-获取https://registry.npmjs.org/ -未找到
@oBusk看起来像是在回购中运行的
npm uninstall
将遇到以下问题:(
{

  name: "@my-name/dependency",
  version: "1.2.0"
}
{
  name: "@my-name/dependant",
  dependencies: {
    "@my-name/dependency": "<VERSION>"
  }
}
{ 
  "dependencies": { 
    "new-refactored-package" : "*"
  }
}