📌 背景
在 Debian 上使用以下命令創建了一個 Svelte 項目:
npm install -g sv
npx sv create my-svelte-demo
cd my-svelte-demo
npm install
npm run dev
現在需要將該項目遷移到一臺 無法聯網的 RHEL 9.4 服務器 上運行,出現如下報錯:
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/path/to/node_modules/dist/node/cli.js'
? 錯誤原因分析
-
報錯來自
npm run dev
中的vite
啟動失敗。 -
錯誤提示:
Cannot find module '.../node_modules/dist/node/cli.js'
-
說明當前項目的
node_modules
中的vite
被破壞或軟鏈接指向了錯誤路徑(如遷移時損壞、部分依賴缺失)。
? 正確的遷移方案(推薦)
一、在 Debian 上重新打包項目(含依賴)
- 清理舊依賴并重新安裝:
cd my-svelte-demo
rm -rf node_modules package-lock.json
npm install
- 檢查 Vite 執行文件是否正確:
ls -l node_modules/.bin/vite
head -n 5 node_modules/.bin/vite
輸出示例(? 正確):
#!/usr/bin/env node
require('../vite/bin/vite.js');
- 打包整個項目(包含依賴):
cd ..
tar -czvf my-svelte-demo.tar.gz my-svelte-demo/
二、在 RHEL 9.4 上準備運行環境
-
安裝 Node.js(離線)
- 下載
.tar.xz
版本 Node.js:
https://nodejs.org/en/download - 解壓并配置環境變量(假設解壓路徑為
~/Softwares/nodejs
):
- 下載
tar -xf node-vXX.X.X-linux-x64.tar.xz
mv node-vXX.X.X-linux-x64 ~/Softwares/nodejs
echo 'export PATH=$HOME/Softwares/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
- 驗證 Node.js 和 npm 可用:
node -v
npm -v
三、在 RHEL 上解壓并運行項目
- 將項目打包文件復制到服務器:
scp my-svelte-demo.tar.gz tester@rhel-server:/home/tester/Projects/
- 解壓并運行:
cd /home/tester/Projects
tar -xzvf my-svelte-demo.tar.gz
cd my-svelte-demo
npm run dev
默認端口是 5173,需開放防火墻端口(如果使用
firewalld
):
sudo firewall-cmd --add-port=5173/tcp --permanent
sudo firewall-cmd --reload
🛠? 其他可選方案
- 使用
npm run build
構建靜態站點后再遷移 - 使用
npx serve dist
或通過 nginx/Apache 提供服務 - 將 Node.js + 項目整體打包為離線安裝包
? 總結表
步驟 | 操作 | 說明 |
---|---|---|
Debian 環境準備 | npm install + tar -czf | 確保依賴完整并打包 |
RHEL 安裝 Node.js | 使用離線版 .tar.xz | 配置路徑環境變量 |
項目遷移運行 | 解壓并 npm run dev | 本地啟動開發服務器 |