我使用的库支持另一个具有广泛版本的库作为对等依赖项。不幸的是,工作区的子项目之一拉入了与使用库的子项目不同的版本。结果,它们最终需要不同的版本。
我正在尝试使用选择性分辨率来处理这个问题并强制它使用正确的版本(https://yarnpkg.com/lang/en/docs/selective-version-resolutions/),但我没有任何运气。
我可能误解了如何利用这些。
我当前的设置是我有一个根工作区,里面有这些孩子:Project A package.json(这是问题的根源):
dependencies: {
backbone.marionette: '2.4.1'
}
Run Code Online (Sandbox Code Playgroud)
项目 B package.json(这是有问题的应用程序):
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
}
Run Code Online (Sandbox Code Playgroud)
@organization/UILibrary(在工作区之外) package.json 看起来像这样:
peerDependencies: {
backbone.marionette: ">= 1 < 3"
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使项目 B 不依赖于项目 A,当@organization/UILibrary 被拉入项目 B 时,它会根据它的需要获得 2.4.1 版的主干.marionette(而项目 B 的本地要求是 1.8.8)。
我尝试使用分辨率将项目 B package.json 更新为:
dependencies: {
backbone.marionette: '1.8.8',
@organization/UILibrary: '0.0.22'
},
{
"resolutions": {
"@organization/**/backbone.marionette": "1.8.8",
"@organization/backbone.marionette": "1.8.8",
"@organization/UILibrary/backbone.marionette: "1.8.8",
"@organization/UILibrary/**/backbone.marionette: '1.8.8"
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?基于对纱线问题及其一些选择性依赖 PR 的一些挖掘(参见https://github.com/yarnpkg/yarn/issues/4874),我相信这可能是由于 UILibrary 的作用域(有斜线) )。
我在单一存储库中有这个大型打字稿项目,使用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, …
我的最终目标是在使用Browserify和Babel 7的项目中使用Yarn Workspaces.这是我遇到的问题的最小再现.基本上似乎在子文件夹中存在一个package.json文件(这是你使用Yarn Workspaces时所拥有的东西之一)会破坏我的Browserify构建,我无法弄清楚原因.
首先,安装依赖项(你可以使用yarn或npm,无所谓):
$ npm install
Run Code Online (Sandbox Code Playgroud)
然后确认Browserify + Babel构建工作:
$ npm run build
> browserify-babelify-yarn-workspaces@1.0.0 build /home/user/projects/browserify-babelify-yarn-workspaces
> browserify a/index.js -t babelify --outfile bundle.js
Run Code Online (Sandbox Code Playgroud)
好的,一切都很好!我的编译代码在bundle.js中.
现在让我们在a文件夹中创建一个虚拟的package.json :
$ echo "{}" > a/package.json
Run Code Online (Sandbox Code Playgroud)
这不应该改变构建,对吗?错误:
$ npm run build
> browserify-babelify-yarn-workspaces@1.0.0 build /home/user/projects/browserify-babelify-yarn-workspaces
> browserify a/index.js -t babelify --outfile bundle.js
/home/user/projects/browserify-babelify-yarn-workspaces/a/index.js:1
import lib from "./lib.js";
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! browserify-babelify-yarn-workspaces@1.0.0 …Run Code Online (Sandbox Code Playgroud) 我们开始采用使用毛线工作区的monorepo设置,并且我们希望将Firebase函数包含在其中。回购结构类似于:
repo
node_modules <- all dependencies
packages
core
commom
functions <- firebase functions
Run Code Online (Sandbox Code Playgroud)
因此,此设置存在2个问题:
core和commom,因此从node_modules到回购软件包中的纱线符号链接。无论如何,我可以处理吗?
node.js firebase google-cloud-functions monorepo yarn-workspaces
webpack-dev-server error cannot find module 'webpack-cli/bin/config/config-yargs在 yarn 工作区中安装 webpack、webpack-cli 和 webpack-dev-server 时出现错误“ '”。在 repo 中安装它们时没有这个问题。
我检查了根节点和子节点中的 node_modules。看来这个 config/config-yargs 文件安装在CHILD的 node_module 中,但没有安装在ROOT 中。
我必须手动将它从子级复制到根目录才能使其正常工作。
有没有办法正确安装它?
我的根 package.json :
{
"private": true,
"workspaces": [
"packages/server",
"packages/front", <-- webpack has been installed her
],
"name": "test",
"version": "1.0.0",
"main": "index.js",
"license": "MIT"
}
Run Code Online (Sandbox Code Playgroud)
子 package.json 的一部分
{
"devDependencies": {
"@babel/core": "^7.8.4",
"@babel/preset-env": "^7.8.4",
"@babel/preset-react": "^7.8.3",
"@babel/preset-typescript": "^7.8.3",
"typescript": "^3.7.5",
"webpack": "^4.41.6",
"webpack-cli": "^3.3.11",
"webpack-dev-server": "^3.10.3"
}
Run Code Online (Sandbox Code Playgroud)
webpack.config.js
const …Run Code Online (Sandbox Code Playgroud) 根据带有 Yarn 工作区的 Firebase 函数,我想使用 Yarn 工作区将 monorepo 部署到 Firebase。我可以成功地将“web”方面部署到 Firebase 托管,它引用了一个共享的“核心”工作区。但是,尝试对 Firebase 函数上的“函数”工作区执行相同操作失败。
我正在使用具有以下文件夹结构的 Yarn Workspaces:
packages/
core/ // name: firebase-monorepo-core: custom core package
functions/ // name: firebase-monorepo-functions: firebase functions package
web/ // name: firebase-monorepo-web: react package
Run Code Online (Sandbox Code Playgroud)
这些已在根package.json文件中配置:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"**/firebase-monorepo-core"
]
}
Run Code Online (Sandbox Code Playgroud)
在试图使纱线在工作区火力地堡(并因此分享我的core包)我使用的nohoist功能来创建符号链接到core工作区functions,并web按照twiz的#1的答案。
该core包还作为functionsand 中的依赖项存在web:
"dependencies": {
"firebase-monorepo-core": …Run Code Online (Sandbox Code Playgroud) 我正在测试设置 yarn 2 工作区。我想我已经按照我应该的方式完成了它,但是当我yarn install从根目录运行时,它不会安装任何模块,也不会按预期创建依赖项的符号链接。我有以下文件夹结构
root/
package-a/
package-b/
Run Code Online (Sandbox Code Playgroud)
每个都包含一个 package.json,每个包文件夹都包含一个 index.js。这是 package.json 文件
根:
{
"name": "yarn-workspaces-poc",
"version": "1.0.0",
"license": "MIT",
"private": true,
"workspaces": [
"package-a/",
"package-b/"
]
}
Run Code Online (Sandbox Code Playgroud)
包-a:
{
"name": "package-a",
"version": "1.0.0",
"type": "module",
"dependencies": {
"cross-env": "5.0.5",
"package-b": "workspace:*"
}
}
Run Code Online (Sandbox Code Playgroud)
包-b:
{
"name": "package-b",
"version": "1.0.0",
"type": "module",
"main": "index.js",
"dependencies": {
"cross-env": "5.0.5"
}
}
Run Code Online (Sandbox Code Playgroud)
这是js文件
包-a/index.js
import test from "package-b";
console.log('testing');
console.log(test());
Run Code Online (Sandbox Code Playgroud)
包-b/index.js
export default function b() {
console.log("From b. You …Run Code Online (Sandbox Code Playgroud) 如果我eslint .从项目根目录运行,它会将所有错误和警告打印到控制台,正如我所期望的那样。
但是,当我cd进入该项目的子目录时,eslint .会产生以下错误消息:
<--- Last few GCs --->
[10574:0x4e6ca40] 72313 ms: Mark-sweep (reduce) 4073.6 (4143.3) -> 4073.0 (4143.8) MB, 3637.8 / 0.0 ms (average mu = 0.082, current mu = 0.001) allocation failure scavenge might not succeed
[10574:0x4e6ca40] 75948 ms: Mark-sweep (reduce) 4074.1 (4143.8) -> 4073.0 (4144.1) MB, 3630.7 / 0.0 ms (average mu = 0.043, current mu = 0.001) allocation failure scavenge might not succeed
<--- JS stacktrace --->
FATAL ERROR: Reached …Run Code Online (Sandbox Code Playgroud) 在哪里可以了解有关workspace:版本号前缀是什么的更多信息?
例如,在巴别塔中:
"dependencies": {
"@babel/helper-plugin-utils": "workspace:^7.13.0",
Run Code Online (Sandbox Code Playgroud)
我有一个 monorepo,使用yarn 2.4、webpack 和 babel 以及一个顶层babel.config.json,具有以下文件夹结构(稍微简化)
|-- .yarn
|-- package.json (top-level)
|-- babel.config.json
|-- tsconfig.json
|-- /* other config files... /
|-- modules
| |-- build
| | |-- build-system
| | | |-- package.json (module-level)
| | | |-- entry.js
| | | |-- webpack.js
| | | |-- /* source... */
| |-- /* other module folders... */
Run Code Online (Sandbox Code Playgroud)
我已将 ts/js 文件的 webpack 规则更改为以下内容:
{
test: /\.(j|t)sx?$/,
use: {
loader: "babel-loader",
options: {
babelrcRoots: ['../..'],
rootMode: 'upward', …Run Code Online (Sandbox Code Playgroud) yarn-workspaces ×10
yarnpkg ×5
monorepo ×3
node.js ×3
babeljs ×2
firebase ×2
lerna ×2
babel ×1
babelify ×1
browserify ×1
build ×1
eslint ×1
heap-memory ×1
javascript ×1
typescript ×1
webpack ×1
yarn-v2 ×1