将Lerna与未发布的包一起使用
我正试图和勒娜建立我的monorepo。计划是通过提取代码块来重构现有项目,这些代码块应该是他们自己的包。我已经运行了将Lerna与未发布的包一起使用,lerna,Lerna,我正试图和勒娜建立我的monorepo。计划是通过提取代码块来重构现有项目,这些代码块应该是他们自己的包。我已经运行了lerna init,当前的设置如下所示: project/ packages/ new-refactored-package/ package.json prior-existing-project/ package.json { "dependencies" : { "new-refactored-package"
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预发布所有引导包
我误解了吗?我是否必须首先将依赖的软件包发布到
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" : "*"
}
}