fix(install): npm-cli.js path + CONTRIBUTING/PR template
install.sh: bundled Node 的 INSTALL_NPM 之前指向 bin/npm shell wrapper, 通过 \"node npm\" 调用会失败。改为 lib/node_modules/npm/bin/npm-cli.js, 并加 run_npm() 帮助函数区分系统 Node(用 npm 可执行)和 bundled Node。 install.ps1: 系统 Node 场景下 npm-cli.js 路径推导脆弱。改为按候选路径 依次试探,找不到则直接退到 npm.cmd。 新增 CONTRIBUTING.md + .github/PULL_REQUEST_TEMPLATE.md,规范 PR 流程, 减少空白/无说明 PR(对应 issue PR #36)。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -93,12 +93,18 @@ if ($sysNode) {
|
||||
if ($major -ge 20) {
|
||||
Write-Green " [OK] System Node.js $sysVer found, reusing"
|
||||
$INSTALL_NODE = "node"
|
||||
$npmCmd = (Get-Command npm -ErrorAction SilentlyContinue).Source
|
||||
$npmRoot = Split-Path (Split-Path $npmCmd)
|
||||
$NPM_CLI = "$npmRoot\node_modules\npm\bin\npm-cli.js"
|
||||
if (-not (Test-Path $NPM_CLI)) {
|
||||
$npmPrefix = & node -e "console.log(process.execPath.replace(/[\\\/]node\.exe$/i,''))" 2>$null
|
||||
$NPM_CLI = "$npmPrefix\node_modules\npm\bin\npm-cli.js"
|
||||
# Resolve npm-cli.js next to node.exe; fall back to npm.cmd as a launcher.
|
||||
$nodeExeDir = Split-Path $sysNode.Source -Parent
|
||||
$candidates = @(
|
||||
"$nodeExeDir\node_modules\npm\bin\npm-cli.js",
|
||||
"$env:APPDATA\npm\node_modules\npm\bin\npm-cli.js",
|
||||
"$env:ProgramFiles\nodejs\node_modules\npm\bin\npm-cli.js"
|
||||
)
|
||||
$NPM_CLI = $null
|
||||
foreach ($p in $candidates) { if (Test-Path $p) { $NPM_CLI = $p; break } }
|
||||
if (-not $NPM_CLI) {
|
||||
# Last resort: use npm.cmd directly (don't pass through node.exe)
|
||||
$NPM_CLI = (Get-Command npm -ErrorAction SilentlyContinue).Source
|
||||
}
|
||||
$USE_SYSTEM_NODE = $true
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ if [ "$USE_SYSTEM_NODE" = "false" ]; then
|
||||
if [ -f "$NODE_INSTALL_DIR/bin/node" ]; then
|
||||
echo -e " ${GREEN}✓${NC} Node.js 已存在,跳过下载"
|
||||
INSTALL_NODE="$NODE_INSTALL_DIR/bin/node"
|
||||
INSTALL_NPM="$NODE_INSTALL_DIR/bin/npm"
|
||||
INSTALL_NPM="$NODE_INSTALL_DIR/bin/npm-cli.js"
|
||||
else
|
||||
echo -e " ${CYAN}↓${NC} 从国内镜像下载 Node.js $NODE_VERSION ($PLATFORM)..."
|
||||
TARBALL="node-${NODE_VERSION}-${PLATFORM}.tar.gz"
|
||||
@@ -144,7 +144,7 @@ if [ "$USE_SYSTEM_NODE" = "false" ]; then
|
||||
if [ -f "$NODE_INSTALL_DIR/bin/node" ]; then
|
||||
echo -e " ${GREEN}✓${NC} Node.js 安装完成"
|
||||
INSTALL_NODE="$NODE_INSTALL_DIR/bin/node"
|
||||
INSTALL_NPM="$NODE_INSTALL_DIR/bin/npm"
|
||||
INSTALL_NPM="$NODE_INSTALL_DIR/lib/node_modules/npm/bin/npm-cli.js"
|
||||
else
|
||||
echo -e " ${RED}✗ Node.js 下载失败${NC}"
|
||||
exit 1
|
||||
@@ -152,6 +152,16 @@ if [ "$USE_SYSTEM_NODE" = "false" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
# Helper: invoke npm. For bundled Node we have npm-cli.js (run via node).
|
||||
# For system Node, INSTALL_NPM is the npm shell wrapper (executable).
|
||||
run_npm() {
|
||||
if [ "$USE_SYSTEM_NODE" = "true" ]; then
|
||||
"$INSTALL_NPM" "$@"
|
||||
else
|
||||
"$INSTALL_NODE" "$INSTALL_NPM" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
echo ""
|
||||
|
||||
# ============================================================
|
||||
@@ -176,7 +186,7 @@ PKGJSON
|
||||
fi
|
||||
|
||||
echo -e " ${CYAN}↓${NC} 从国内镜像安装..."
|
||||
"$INSTALL_NODE" "$INSTALL_NPM" install --prefix "$CORE_DIR" --registry="$MIRROR" 2>&1 | tail -5
|
||||
run_npm install --prefix "$CORE_DIR" --registry="$MIRROR" 2>&1 | tail -5
|
||||
echo -e " ${GREEN}✓${NC} OpenClaw 安装完成"
|
||||
fi
|
||||
|
||||
@@ -191,7 +201,7 @@ if [ -d "$CORE_DIR/node_modules/@sliverp/qqbot" ]; then
|
||||
echo -e " ${GREEN}✓${NC} QQ 插件已安装,跳过"
|
||||
else
|
||||
echo -e " ${CYAN}↓${NC} 安装 QQ 插件..."
|
||||
"$INSTALL_NODE" "$INSTALL_NPM" install @sliverp/qqbot@latest --prefix "$CORE_DIR" --registry="$MIRROR" 2>/dev/null || {
|
||||
run_npm install @sliverp/qqbot@latest --prefix "$CORE_DIR" --registry="$MIRROR" 2>/dev/null || {
|
||||
echo -e " ${YELLOW}⚠${NC} QQ 插件安装失败(不影响主功能)"
|
||||
}
|
||||
if [ -d "$CORE_DIR/node_modules/@sliverp/qqbot" ]; then
|
||||
|
||||
Reference in New Issue
Block a user