CI Build issue patch - 'patch' is possibly 'undefined'.

未关闭
#1,143 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 4 天内回复

还没有人认领这个 Issue。

  • #1240 来自 @mixelburg —— 已关闭,未合并
  • #1317 来自 @cpruijsen —— 已关闭,未合并

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
typescript

调研方向

从 immer/src/core/immerClass.ts:181 中报告的 pnpm 构建失败以及补丁中显示的 immer/src/utils/common.ts 相关行开始。检查仓库如何处理此依赖项,并在进行任何依赖项级别的修复后验证构建;当 pnpm build 在没有报告的 TypeScript 错误的情况下完成时,即表示完成。

由索引模型根据 Issue 内容生成。

描述

Hi! 👋

I was getting following error while doing build

./node_modules/.pnpm/[email protected]/node_modules/immer/src/core/immerClass.ts:181:8
Type error: 'patch' is possibly 'undefined'.
  179 | 		for (i = patches.length - 1; i >= 0; i--) {
  180 | 			const patch = patches[i]
> 181 | 			if (patch.path.length === 0 && patch.op === "replace") {
      | 			    ^
  182 | 				base = patch.value
  183 | 				break
  184 | 			}
 ELIFECYCLE  Command failed with exit code 1.
Error: Command "pnpm build" exited with 1

Here is the diff that solved my problem:

diff --git a/node_modules/immer/src/core/immerClass.ts b/node_modules/immer/src/core/immerClass.ts
index f827361..37bb8c9 100644
--- a/node_modules/immer/src/core/immerClass.ts
+++ b/node_modules/immer/src/core/immerClass.ts
@@ -1,30 +1,30 @@
 import {
-	IProduceWithPatches,
+	DRAFT_STATE,
+	Draft,
+	Drafted,
 	IProduce,
+	IProduceWithPatches,
 	ImmerState,
-	Drafted,
-	isDraftable,
-	processResult,
-	Patch,
+	NOTHING,
 	Objectish,
-	DRAFT_STATE,
-	Draft,
+	Patch,
 	PatchListener,
-	isDraft,
-	isMap,
-	isSet,
 	createProxyProxy,
-	getPlugin,
+	current,
 	die,
 	enterScope,
-	revokeScope,
-	leaveScope,
-	usePatchesInScope,
-	getCurrentScope,
-	NOTHING,
 	freeze,
-	current
-} from "../internal"
+	getCurrentScope,
+	getPlugin,
+	isDraft,
+	isDraftable,
+	isMap,
+	isSet,
+	leaveScope,
+	processResult,
+	revokeScope,
+	usePatchesInScope
+} from "../internal";
 
 interface ProducersFns {
 	produce: IProduce
@@ -178,7 +178,7 @@ export class Immer implements ProducersFns {
 		let i: number
 		for (i = patches.length - 1; i >= 0; i--) {
 			const patch = patches[i]
-			if (patch.path.length === 0 && patch.op === "replace") {
+			if (patch?.path?.length === 0 && patch?.op === "replace") {
 				base = patch.value
 				break
 			}
diff --git a/node_modules/immer/src/utils/common.ts b/node_modules/immer/src/utils/common.ts
index 692157b..8db10ba 100644
--- a/node_modules/immer/src/utils/common.ts
+++ b/node_modules/immer/src/utils/common.ts
@@ -1,14 +1,14 @@
 import {
-	DRAFT_STATE,
-	DRAFTABLE,
-	Objectish,
-	Drafted,
-	AnyObject,
 	AnyMap,
+	AnyObject,
 	AnySet,
-	ImmerState,
 	ArchType,
 	die,
+	DRAFT_STATE,
+	DRAFTABLE,
+	Drafted,
+	ImmerState,
+	Objectish,
 	StrictMode
 } from "../internal"
 
@@ -160,14 +160,14 @@ export function shallowCopy(base: any, strict: StrictMode) {
 		for (let i = 0; i < keys.length; i++) {
 			const key: any = keys[i]
 			const desc = descriptors[key]
-			if (desc.writable === false) {
+			if (desc?.writable === false) {
 				desc.writable = true
 				desc.configurable = true
 			}
 			// like object.assign, we will read any _own_, get/set accessors. This helps in dealing
 			// with libraries that trap values, like mobx or vue
 			// unlike object.assign, non-enumerables will be copied as well
-			if (desc.get || desc.set)
+			if (desc?.get || desc?.set)
 				descriptors[key] = {
 					configurable: true,
 					writable: true, // could live with !!desc.set as well here...

This issue body was partially generated by patch-package.

主要语言
JavaScript
星标
29k
派生
905
平均合并
3 天 16 小时
30 天内合并 PR
22

环境准备

这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

immerjs/immer 的其他 Issue

查看 immerjs/immer 的全部 Issue

相似的 Issue

更多 JavaScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。