Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
B
bit-pm
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
燕伟桐
bit-pm
Commits
4d2b4783
Unverified
提交
4d2b4783
authored
5月 20, 2025
作者:
Will Chen
提交者:
GitHub
5月 20, 2025
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix scaffold copy and better error handling for create app (#202)
I was over-eager in
https://github.com/dyad-sh/dyad/pull/200
and removed copyDirectoryRecursive which is actually needed to copy the scaffold out.
上级
b4b9556e
显示空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
31 行增加
和
13 行删除
+31
-13
app_handlers.ts
src/ipc/handlers/app_handlers.ts
+9
-13
file_utils.ts
src/ipc/utils/file_utils.ts
+20
-0
home.tsx
src/pages/home.tsx
+2
-0
没有找到文件。
src/ipc/handlers/app_handlers.ts
浏览文件 @
4d2b4783
...
...
@@ -12,7 +12,10 @@ import { promises as fsPromises } from "node:fs";
// Import our utility modules
import
{
withLock
}
from
"../utils/lock_utils"
;
import
{
getFilesRecursively
}
from
"../utils/file_utils"
;
import
{
copyDirectoryRecursive
,
getFilesRecursively
,
}
from
"../utils/file_utils"
;
import
{
runningApps
,
processCounter
,
...
...
@@ -187,17 +190,13 @@ export function registerAppHandlers() {
})
.
returning
();
// Start async operations in background
try
{
await
fsPromises
.
cp
(
// Why do we not use fs.cp here?
// Because scaffold is inside ASAR and it does NOT
// behave like a regular directory if you use fs.cp
// https://www.electronjs.org/docs/latest/tutorial/asar-archives#limitations-of-the-node-api
await
copyDirectoryRecursive
(
path
.
join
(
__dirname
,
".."
,
".."
,
"scaffold"
),
fullAppPath
,
{
recursive
:
true
,
// Scaffold should *not* have node_modules anyways, but
// just in case, we filter it out.
filter
:
(
source
)
=>
!
source
.
includes
(
"node_modules"
),
},
);
// Initialize git repo and create first commit
await
git
.
init
({
...
...
@@ -228,9 +227,6 @@ export function registerAppHandlers() {
initialCommitHash
:
commitHash
,
})
.
where
(
eq
(
chats
.
id
,
chat
.
id
));
}
catch
(
error
)
{
logger
.
error
(
"Error in background app initialization:"
,
error
);
}
return
{
app
,
chatId
:
chat
.
id
};
},
...
...
src/ipc/utils/file_utils.ts
浏览文件 @
4d2b4783
import
fs
from
"node:fs"
;
import
{
promises
as
fsPromises
}
from
"node:fs"
;
import
path
from
"node:path"
;
/**
...
...
@@ -31,3 +32,22 @@ export function getFilesRecursively(dir: string, baseDir: string): string[] {
return
files
;
}
export
async
function
copyDirectoryRecursive
(
source
:
string
,
destination
:
string
,
)
{
await
fsPromises
.
mkdir
(
destination
,
{
recursive
:
true
});
const
entries
=
await
fsPromises
.
readdir
(
source
,
{
withFileTypes
:
true
});
for
(
const
entry
of
entries
)
{
const
srcPath
=
path
.
join
(
source
,
entry
.
name
);
const
destPath
=
path
.
join
(
destination
,
entry
.
name
);
if
(
entry
.
isDirectory
())
{
await
copyDirectoryRecursive
(
srcPath
,
destPath
);
}
else
{
await
fsPromises
.
copyFile
(
srcPath
,
destPath
);
}
}
}
src/pages/home.tsx
浏览文件 @
4d2b4783
...
...
@@ -25,6 +25,7 @@ import { useTheme } from "@/contexts/ThemeContext";
import
{
Button
}
from
"@/components/ui/button"
;
import
{
ExternalLink
}
from
"lucide-react"
;
import
{
ImportAppButton
}
from
"@/components/ImportAppButton"
;
import
{
showError
}
from
"@/lib/toast"
;
// Adding an export for attachments
export
interface
HomeSubmitOptions
{
...
...
@@ -133,6 +134,7 @@ export default function HomePage() {
navigate
({
to
:
"/chat"
,
search
:
{
id
:
result
.
chatId
}
});
}
catch
(
error
)
{
console
.
error
(
"Failed to create chat:"
,
error
);
showError
(
"Failed to create app. "
+
(
error
as
any
).
toString
());
setIsLoading
(
false
);
// Ensure loading state is reset on error
}
// No finally block needed for setIsLoading(false) here if navigation happens on success
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论