我正在尝试将LernaJS与typescript一起使用,但遇到一些问题。当我尝试运行我的package-1并将package-2作为依赖项时,出现错误:
module.js:549
犯错
^
错误:找不到模块“ package-2”
在Function.Module._resolveFilename(module.js:547:15)
在Function.Module._load(module.js:474:25)
在Module.require(module.js:596:17)
在要求时(internal / module.js:11:18)
在对象。(/home/gabriel/Documentos/projetos/nodejs/lerna-t2/packages/package-1/dist/index.js:3:19)
在Module._compile(module.js:652:30)
在Object.Module._extensions..js(module.js:663:10)
在Module.load(module.js:565:32)
在tryModuleLoad(module.js:505:12)
在Function.Module._load(module.js:497:3)
我已按照以下步骤操作:
。
??? lerna.json
??? node_modules
??? package.json
??? package-lock.json
??? 包装
??? 包装1
??? 套餐2
{
“ compilerOptions”:{
“ outDir”:“ dist”,
“ target”:“ es5”,
“ module”:“ commonjs”
}
}
文件树
我的“ package-1”文件树:
。
??? dist
???? … 我在单一存储库中有这个大型打字稿项目,使用yarn workspaces并lerna具有以下架构:
repo
??? API
? ??? (GraphQL API)
??? Apps
? ??? (Front-end React Apps)
??? Libs
? ??? (Shared libraries)
??? Services
??? (Back-end Services)
Run Code Online (Sandbox Code Playgroud)
我package.json看起来像:
{
...
"workspaces": [
"API/**/*",
"Apps/**/*",
"Libs/**/*",
"Services/**/*",
],
"scripts": {
"bootstrap": "lerna bootstrap",
"build": "lerna run build"
}
...
}
Run Code Online (Sandbox Code Playgroud)
我的lerna.json样子:
{
"lerna": "2.11.0",
"npmClient": "yarn",
"useWorkspaces": true,
"workspaces": [
"Libs/**/*",
"API/**/*",
"Apps/**/*",
"Services/**/*"
],
"version": "1.0.0"
}
Run Code Online (Sandbox Code Playgroud)
现在我需要Libs在两者之前构建所有共享Apps, …
我有一个 lerna 脚本 ( lerna dev),它使用该--parallel选项启动多个包的开发服务器(如果我不使用该选项,则只会启动第一个服务,而不会启动其他服务)。这些服务器在不同端口上以开发模式为各自的应用程序提供服务,并带有热重载。基本上,这允许顺利开发,因为我们只需要输入一个命令即可开始处理多个包。
我注意到的问题是,当我中断此 lerna 任务时,服务器不会关闭。当我运行我的lerna dev命令时,它会打印消息,说明服务器已经在它们使用的端口上运行。这意味着,当我关闭lerna dev命令(使用CTRL+ C)时,它不会杀死所有正在运行的进程(有些被杀死,有些没有)。
有趣的是,那些没有关闭的是create-react-app projects.
所以这是我的问题:如何确保通过lerna run带有--parallel选项的命令启动的进程都与主进程一起被杀死?
PS:这发生在 Unix 系统上,我们不使用 Windows。
我正在尝试使用 lerna+typescript 构建一个 monorepo,我正在使用这个 repo 作为开始:https : //github.com/Izhaki/mono.ts
我想要实现的是调试 Visual Studio 代码中的代码。我试过一些东西来添加launch.json这样的:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug",
"preLaunchTask": "npm: build",
"program": "${workspaceFolder}/packages/line/src/index.ts",
"sourceMaps": true,
"smartStep": true,
"internalConsoleOptions": "openOnSessionStart",
"outFiles": [
"${workspaceFolder}/packages/line/dist/**/*.js"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我收到了一些关于他导入和使用的错误:
/Users/davidericci/Desktop/mono.ts-master/packages/line/dist/index.js:1
(function (exports, require, module, __filename, __dirname) { import { getDistance } from '@geo/point';
^
SyntaxError: Unexpected token {
Run Code Online (Sandbox Code Playgroud)
所以我在tsconfig.build.json(内部包)中进行了更改:
"target": "es2017",
"module": "commonjs",
Run Code Online (Sandbox Code Playgroud)
和里面tsconfig.base.json(总是在包内):
{
"compilerOptions": {
"lib": ["es2015", …Run Code Online (Sandbox Code Playgroud) 我正在使用下面的命令
lerna bootstrap --hoist
Run Code Online (Sandbox Code Playgroud)
我希望 lerna 将包的所有 dev 和 prod 依赖项安装到主根 node_modules 中。 有些包是相互依赖的。
当我运行 bootstrap 命令时,它将所有依赖项安装到根节点模块。但在这个过程之后,它会将一些包相互符号链接。
我只想将所有依赖项安装到根节点模块,包括依赖包。我不需要任何符号链接依赖项。
如何避免符号链接过程?
我有经典的 Lerna 设置。根目录,packages文件夹,2个子目录
我只想yarn install在一个包中运行,然后安装这个包的依赖项。出于某种原因,当我运行它时(甚至从这个文件夹中),它正在安装node_modules在根、packageA 和 packageB 中。
有没有解决方案只允许我node_modules为所选目录安装?
我有/frontend(JS/Vue)和/backend(PHP)的存储库docker-compose.yml用于开发。但现在我需要添加另一个 JS 前端,该前端将共享一些组件、库等。我不想重复代码,所以我发现我可以使用许多工具来实现此目的,例如lerna、nx等turborepo,用于使用共享包管理 monorepo。
问题是我发现的所有教程和示例存储库都基于 100% JS 存储库,例如前面的 React + 后面的 Nest 等。
所以问题-用于前。nx在具有多种语言的存储库上有意义,只是为了在 JS 包上利用它?如果是,目录结构应该是什么样子?或者也许有更好的 monorepo 工具是为多种语言设计的,而不仅仅是 JS?
已将 lerna 添加到我的项目中,通过成功运行此命令,我已将一个包添加到我的服务器:
lerna add @types/express --dev
Run Code Online (Sandbox Code Playgroud)
但是当我想添加另一个时:
lerna add graphql class-validator type-graphql
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
info cli using local version of lerna
lerna notice cli v3.22.1
lerna WARN No packages found where graphql can be added.
Run Code Online (Sandbox Code Playgroud)
yarn add而不是leran add吗?看起来它有效,但我怀疑包树形式是否正确在哪里可以了解有关workspace:版本号前缀是什么的更多信息?
例如,在巴别塔中:
"dependencies": {
"@babel/helper-plugin-utils": "workspace:^7.13.0",
Run Code Online (Sandbox Code Playgroud)
我有几个 gitlab 存储库,其中一般设置涉及一个master分支、一个stage(预发布)分支和一个dev分支。
所有 3 个分支的推送权限均被禁用。
工作流程是从dev分支中派生任何修补程序、错误修复和功能。当您对发布感到满意时,您将向 提交合并请求dev。最终,当内部准备好稳定的构建时dev;将为该分支提交合并请求stage。最后,当您对预发布感到满意时,您将提交分支的合并请求master。
我配置了 CI/CD,以便通过自动生成文件从master和分支自动执行测试、构建和部署。分支部署到 UAT s3 Bucket 并部署到生产 s3 Bucket。stageCHANGELOG.mdstagemaster
部署是通过Semantic Versioning 2.0.0它来处理的,它负责更新版本、生成变更日志和部署。
我有一个与上面描述的类似的设置,除了它是一个 monorepo,所以我用来Lerna处理发布(部署)和{"conventionalCommits": true}复制Semantic Versioning 2.0.0的行为。我在 monorepo 中使用独立版本控制。
和 的Semantic Versioning 2.0.0设置都Lerna强制master分支始终位于 和 分支之后或等于stage和dev分支;并且stage分支始终位于分支后面或等于dev分支,就像级联效应一样。
dev>= stage …
semantic-versioning gitlab gitlab-ci lerna conventional-commits