问题标签 [lerna]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - LernaJS Typescript 找不到模块
我正在尝试将 LernaJS 与打字稿一起使用,但我遇到了一些问题。当我尝试运行具有 package-2 作为依赖项的 package-1 时,出现错误:
我已按照以下步骤操作:
- 我创建了一个目录并运行了命令“lerna init”
- 我在 (package-1, package-2) 'packages' 文件夹中创建了 2 个文件夹
- 我在两个(package-1,package-2)中都运行了“npm init”
- 我在两个包中都创建了一个基本的“tsconfig.json”:
- 我在根文件夹中运行了“lerna bootstrap”
- 我使用了'lerna add package-2 --scope=package-1'
- 我还在根文件夹 package-1 和 package-2 中运行了“npm i”
- 我在 package-1 和 package-2 中运行了“tsc -w”,在 package-1 中运行了“node dist/index.js”
文件树
我的“package-1”文件树:
我的“package-2”文件树:
代码
包 1:
- 索引.ts:
包 2:
- 库/teste.ts:
- 索引.ts:
npm - 如何为现有的 Lerna mono-repo 生成每个包的 package-lock.json
我们有一个现有的Lerna mono-repo,其结构如下:
我们目前在项目中使用 Yarn,实际上只有一个顶级yarn.lock
文件,没有每个包yarn.lock
,因为我们从未使用过 Workspaces。
我们正在尝试切换到 npm,并希望package-lock.json
为 mono-repo 中的每个包生成一个文件,而不仅仅是顶层。我们应该怎么做?运行npm run lerna bootstrap --hoist
会创建一个顶级锁定文件,但不包含任何"dev": true
标签,也不包含任何本地包。我能做的最好的事情是做npm run lerna add somePackage --scope=package1
,即使somePackage
已经存在于 中package
,也会导致为 mono repo 中的每个包生成一个package-lock.json
文件,除了package1
. 此外,生成的package-lock.json
文件没有任何开发依赖项。
此外,我无法进入每个包并运行npm install
,因为npm
不了解我们在 mono-repo 中其他本地包所依赖的许多本地包。奇怪的是,即使在package-lock.json
npm 通过 生成的文件中lerna add
,这些文件也不包含对本地包的任何引用,只包含对外部包的引用。
那么:如何为package-lock.json
mono-repo 中还包含 devDependencies 的每个包生成一个文件?
node.js - 如何通过 EB 的 NodeCommand 调用多个命令?
语境
给定 AWS 的 Elastic Beanstalk 上的一个简单节点应用程序(如eb-node-express-sample)和如下默认nodecommand.config
文件:
问题
如何调用多个 bash 命令来代替npm start
?我希望能够做到以下几点:
或者:
但似乎第一个单词之后的所有内容实际上都是作为单个参数传入的,导致以下输出/var/log/nodejs/nodejs.log
:
有没有办法绕过这个愚蠢的限制并直接运行多个 bash 命令?
动机
start
我有一个 Lerna 应用程序,它在根目录中没有任何有用的脚本,而是start
在packages/api/
. 我在这里特别需要能够在运行之前更改目录start
,但我正在寻找一个通用解决方案来解决运行多个命令的问题。
node.js - Lerna 使用 jenkins 管道发布
我一直在经历试图让 lerna 在我的 ci 管道中发布的噩梦。
我已经设法从 git 中提取脚本来检查标签,并且我找到了withNPM管道插件。因为我lerna
用于发布多个包,所以我必须将.npmrc
插件在工作区中创建的文件移动到主目录的根目录,以便所有包都可以访问它。
NPM 插件使用 jenkins 配置文件来创建.npmrc
文件。看起来像这样:
这是我的 Jenkins 管道中的内容。
这是错误:
我发现我与上面的网址不一致,并将它们都更改为.com
,现在我遇到了这个问题:
javascript - Npm 脚本总是给出错误,因为“不被识别为内部或外部命令”
我有一个 lerna 回购。有 devDependency 可以同时从我的根 package.json 打包。当我在命令行中键入“lerna bootstrap”时,它可以正常工作并将所有根和 subPackages` 依赖项安装到根 node_modules 文件夹中。但是当我输入“npm start”时,它会说:“并发”不被识别为内部或外部命令。当我检查 node_modules/concurrently 文件夹时,它存在没有问题。
我的启动脚本是concurrently --kill-others "npm run start-client" "npm run start-server"
.
这种情况与 webpack-dev-server 相同。除了重新安装所有内容外,我该如何解决此问题。
包.json:
apollo-server - Lerna 找不到符号链接模块的对等依赖项
嗯,不确定这是 lerna 中的错误还是我做错了。我有一个案例,我有一个 lerna monorepo 包,它有一个 peerDependency,它应该在“消费”monorepo 包中找到:
@red/app
有一个dependency
to@red/gql
和 tographql
@red/gql
有peerDependency
一个graphql
@red/gql
使用graphql
(实际上它是使用它的依赖项之一,并且还需要它作为对等依赖项),当我从中调用它时@red/app
找不到graphql
.
如果我bootstrap
使用该hoist
选项,它确实可以工作,所以在我看来它无法找到graphql
包,@red/gql
因为它是符号链接的并且它graphql
在错误的文件夹中搜索。
javascript - 如何在 lerna exec 中设置范围标志?
我正在尝试在 lerna 中运行一个脚本,该脚本将在特定文件夹中的所有组件上执行。
所以我试图运行类似的东西
但我得到这个错误:
我尝试使用不同类型的路径,但没有一个有效。使用范围标志的正确方法是什么?
reactjs - 如何在使用 Next.js 完成的外部项目中使用 Storybook 组件(和 Lerna)?
我刚刚创建了我的 Storybook 组件库(ES6 等)。它的结构是一个 Lerna 项目(所有组件都隔离在 packages/ 文件夹中)。但是,这是一个没有真正发布功能的私人仓库,所以我认为 Lerna 不能使用私人(免费)帐户。我已经将 Storybook 存储库按原样推送到了我的 Bitbucket。
现在,我想使用主应用程序中的组件故事书库,这是基于 Next.js 构建的不同存储库(在 Bitbucket 上)。
我试图按如下方式导入各个故事书组件
但它显然不起作用,返回此错误:
这是因为MyComponent
是一个 jsx 文件。我希望 Next.js 能够转换导入的模块,但事实并非如此。
我的问题是:
我的胆量说将整个故事书作为
git+ssh://git@bitbucket.org/myusername/storybook-repo.git
from导入package.json
不是一个好主意。有更好的解决方案吗?Lerna 是否仅适用于我可以发布我的包的公共/专业存储库?
为什么 Next.js 不转译导入的 jsx 模块?在这一点上,这个过程是如何工作的?我应该从远程仓库转换故事书组件还是从我的主应用程序中完成这项工作?
谢谢
symlink - 使用 Yarn 工作区,编译后的二进制文件如何链接到编译后的工作区?
语境
Yarn 工作区提供了一个方便的类似 mono-repo 的功能,其中包被自动链接。即它们可以相互要求/导入,并且它们的二进制文件可以从工作区根目录链接和访问。
一个例子:
工作区/package.json
工作区/包/a/package.json
工作区/包/a/src/index.js
如果您然后将目录更改为主工作区并运行yarn install
,yarn 会正确链接二进制文件,您可以运行:
从工作区目录就好了。伟大的!
问题
我遇到的问题是,如果您的代码首先必须被编译,则二进制文件在完成之前将不可用yarn install
(因为您不应该在版本控制中发布编译后的代码)。我使用 Typescript 来编译我的 cli:
重命名并更新index.js
为:index.ts
a/package.json
即使在工作区目录上dist/index.js
运行时正确构建yarn install
,它也无法创建到二进制文件的链接:
问题
当我的二进制文件需要在安装时编译时,如何使纱线工作区二进制链接工作?
如果我需要使用 Lerna 来完成这项工作,那也完全可以(尽管最好避免调用,lerna bootstrap
因为这对于纱线工作区来说应该是多余的)。
git - 如何使用 git-only 设置 lerna
我有一个使用子模块共享代码的 React 应用程序,我想用 lerna 交换它。但是我不想发布到 NPM,我只想使用git-only,代码将使用 commitish 发布回 git。基本上文件夹的结构是这样的
所有子模块都进入共享状态。我的问题是如何设置 lerna 以便“app”使用git-only依赖“ui”和“utilities” ?
是不是结构会是这样
还是这样?