顯示具有 nodejs 標籤的文章。 顯示所有文章
顯示具有 nodejs 標籤的文章。 顯示所有文章

2026-05-21

corepack upgrade pnpm

你想要更新 Corepack 內建的 pnpm 版本,但又不想用 corepack use pnpm@latest(因為它會在 package.json 裡面加上 packageManager 欄位)。這個需求可以透過直接更新 Corepack 的「shim」來達成,而不影響你的專案設定。

方法一:直接安裝新版 pnpm

npm install -g pnpm@latest

這樣會在全域安裝最新的 pnpm,Corepack 也會自動偵測到新版,不需要透過 corepack use


方法二:更新 Corepack 的 pnpm shim

Corepack 其實有自己的管理方式,你可以用以下指令更新它的 pnpm 版本,而不會寫入 package.json

corepack prepare pnpm@latest --activate
  • prepare 會下載並安裝指定版本的 pnpm。
  • --activate 會更新 Corepack 的 shim 指向這個版本。
  • 不會修改專案的 package.json

方法三:指定版本而非 latest

如果你想要固定某個版本(避免 latest 帶來不一致),可以直接指定:

corepack prepare pnpm@9.1.0 --activate

✅ 總結:

  • 不要用 corepack use,因為它會修改 package.json
  • corepack prepare ... --activate直接全域安裝 pnpm,就能更新 Corepack 的 pnpm 版本而不影響專案設定。

要不要我幫你整理一個 對比表,清楚列出 corepack usecorepack preparenpm install -g pnpm 三種方式的差異?

你想要更新 Corepack 內建的 pnpm 版本,但又不想用 corepack use pnpm@latest(因為它會在 package.json 裡面加上 packageManager 欄位)。這個需求可以透過直接更新 Corepack 的「shim」來達成,而不影響你的專案設定。

方法一:直接安裝新版 pnpm

npm install -g pnpm@latest

這樣會在全域安裝最新的 pnpm,Corepack 也會自動偵測到新版,不需要透過 corepack use


方法二:更新 Corepack 的 pnpm shim

Corepack 其實有自己的管理方式,你可以用以下指令更新它的 pnpm 版本,而不會寫入 package.json

corepack prepare pnpm@latest --activate
  • prepare 會下載並安裝指定版本的 pnpm。
  • --activate 會更新 Corepack 的 shim 指向這個版本。
  • 不會修改專案的 package.json

方法三:指定版本而非 latest

如果你想要固定某個版本(避免 latest 帶來不一致),可以直接指定:

corepack prepare pnpm@9.1.0 --activate

✅ 總結:

  • 不要用 corepack use,因為它會修改 package.json
  • corepack prepare ... --activate直接全域安裝 pnpm,就能更新 Corepack 的 pnpm 版本而不影響專案設定。

這裡幫你整理一個 對比表,清楚比較三種方式更新 Corepack 的 pnpm 版本:

方法 指令範例 是否修改 package.json 更新範圍 適合情境
corepack use pnpm@latest corepack use pnpm@latest ✅ 會加上 packageManager 欄位 專案層級 (影響當前專案) 適合想要專案明確指定 pnpm 版本的人
corepack prepare pnpm@latest --activate corepack prepare pnpm@latest --activate ❌ 不會修改 package.json Corepack shim (全域) 適合只想更新 Corepack 內建 pnpm,不影響專案設定
npm install -g pnpm@latest npm install -g pnpm@latest ❌ 不會修改 package.json 全域安裝 (繞過 Corepack) 適合不想用 Corepack,直接用全域 pnpm

🔑 重點建議

  • 如果你只是要更新 Corepack 的 pnpm 版本,但不想污染 package.json → 用 corepack prepare ... --activate
  • 如果你完全不想透過 Corepack → 用 全域安裝

2017-12-06

[NativeScript] 初次接觸時遇到的白癡狀況

明明就下載了 Android SDK    甚至 Android Studio
結果依然無法正常啟動  NativeScript

經過以下步驟之後 才正常使用
  • ANDROID_HOME=(Android SDK 路徑)\Sdk
  • ANDROID_SDK_HOME=(HOME路徑 底下要能放 .android 資料夾)
  • ANDROID_AVD_HOME=%ANDROID_SDK_HOME%\.android\avd
  • JAVA_HOME=%JDK_HOME% <=== 因為 NativeScript 只認 JAVA_HOME
  • JDK_HOME=(JDK 路徑)

在專案路徑下建立以下檔案

run-adb.cmd
"%ANDROID_HOME%\platform-tools\adb.exe" %*

run-avd.cmd
"%ANDROID_HOME%\emulator\emulator" %*

在 package.json 內加入以下項目

  "scripts": {
    "start-adb": "cmd /c run-adb.cmd -L tcp:5037 fork-server server --reply-fd 704",
    "start-avd": "cmd /c run-avd.cmd @Nexus_5X_API_23",
    "run": "npx tns run android"N
  },

然後想要執行的時候

先執行一次 npm run start-adb <== 此步驟只需要一次
然後在執行 npm run start-avd <== 此步驟會開啟模擬器

接著就可以執行 npm run run 或者 npx tns run android
看見你的 APP 出現在模擬器裡面
 

2017-07-12

Bash on Ubuntu on Windows

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
 
bash
 
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs 


[NodeJS][Babel][ES6] module.exports = require('module-name') 的奇怪解法

當我們想用 es6 特性的 import/export 來寫出以下這段 nodejs 代碼時

module.exports = require('module-name')

MDN 的範例來說會寫成

import mod from "mod";
export default mod;

但是這段代碼在我的環境內卻是 undefined

改寫成以下這段代碼後
卻可以正常符合期待的運作

import * as mod from './src';
export default mod;

2016-03-19

MSYS2 整合筆記 (待補充)

安裝順序(要按照以下順序才能正常運作)

以下假設 msys2 安裝於 C:\msys64\
  1. msys2 https://msys2.github.io/
  2. Git for Windows https://git-for-windows.github.io/
    安裝時 請將安裝資料夾選擇於 msys2 資料夾

    日後千萬別用 pacman 更新 git
  3. ActivePerl http://www.activestate.com/activeperl
    安裝於 C:\msys64\usr
  4. Node.js https://nodejs.org/en/
    安裝於 C:\msys64\mingw64\bin

    輸入 npm config --global set prefix "C:\msys64\mingw64\bin"

    Set NODE environment variable as C:\msys64\mingw64\bin
    Set NODE_PATH environment variable as C:\msys64\mingw64\bin\node_modules

    檢查以下位置的 npmrc

    C:\msys64\mingw64\bin\node_modules\npm\npmrc
    C:\msys64\mingw64\bin\etc\npmrc
    C:\msys64\mingw64\etc\npmrc
    C:\msys64\etc\npmrc

    %USERPROFILE%\.npmrc


------

狀況處理

使用 pacman 安裝組件時 遇到 winpty 衝突錯誤

error: failed to commit transaction (conflicting files)
winpty-git: /usr/bin/winpty-agent.exe exists in filesystem
winpty-git: /usr/bin/winpty-debugserver.exe exists in filesystem
winpty-git: /usr/bin/winpty.dll exists in filesystem
winpty-git: /usr/bin/winpty.exe exists in filesystem
Errors occurred, no packages were upgraded.

解決方法

將 C:\msys64\usr\bin 裡的 winpty 相關檔案 更名 或者 刪除
然後重新 pacman -S winpty-git 即可解決

解法2: pacman -S --force 組件名