4.5.1 安裝來源
NoteCraftApp 使用文件 第 4 章・使用指南

4.5.1 使用指南

安裝來源

用 install-plugin 從官方 store、第三方 GitHub repo 或本地資料夾安裝 plugin,安裝前會先做靜態檢查並要你確認。

本頁目錄
  1. 三種來源
  2. 安裝前的檢查與確認
  3. 裝完之後
  4. CI 與移除

plugin 是把結構化 JSON 資料檔畫成頁面的渲染器。安裝只是把 plugin 的檔案複製進專案根的 .notecraft/plugins/<id>/,要讓資料檔真的變成頁面,還要寫映射規則。

三種來源

終端機
npx notecraftapp install-plugin                          # 列出官方 store,輸入編號選擇
npx notecraftapp install-plugin er-diagram-renderer      # 官方 plugin,直接給 id
npx notecraftapp install-plugin owner/repo/plugins/foo   # 第三方 GitHub repo 裡的子資料夾
npx notecraftapp install-plugin ./my-plugin              # 本地資料夾
來源寫法
官方 store只寫 id,例如 er-diagram-renderer、openapi-renderer
GitHub repo 根目錄owner/repo
GitHub 子資料夾owner/repo/path,一個 repo 可以放好幾個 plugin
指定版本後面加 #<tag>,例如 owner/repo/plugins/foo#v1.2.0;也可以用 --ref <tag>
完整網址https://github.com/owner/repo/tree/main/plugins/foo
本地資料夾./、../、/ 或 ~ 開頭的路徑,開發自己的 plugin 時用

官方 store 就是 NoteCraftApp GitHub repo 的 plugins/ 資料夾,清單每次都即時從 GitHub 讀取,所以需要網路。只想看清單不安裝,用 --list。

安裝前的檢查與確認

你 install-plugin <來源> 官方 id、owner/repo[/path][#tag]、GitHub 網址或本地資料夾
下載並列出 來源網址、plugin 的 id 與版本、要寫入的檔案清單
靜態檢查
不過
拒絕安裝 白名單外的 import、dangerouslySetInnerHTML、不收的檔案類型或檔名(package.json、lockfile…)、路徑逃脫、缺必要檔、engines 不合
確認:確定安裝?[y/N] CI 這類非互動環境加 --yes 略過
N
結束,什麼都不寫
寫入 .notecraft/plugins/<id>/ 附 .installed.json 記下來源;不跑任何腳本、不 npm install
印出映射範例 加 --apply "<glob>" 時直接寫進 plugins.json
有映射規則後,下一次 build 產生 /view/ 頁面
install-plugin 的步驟:先列出要寫入什麼,靜態檢查與你的確認都通過才寫檔。裝完只是把檔案放進專案,還要有映射規則,資料檔才會變成頁面。

指令會先下載檔案、列出來源網址、plugin 的 id 與版本、要寫入的檔案清單,再跑靜態檢查。下列任何一項不過就拒絕安裝:

  • .tsx/.ts 裡 import 了白名單外的套件。白名單與 AI 生成元件共用:react、react-dom、motion、recharts、d3、lucide-react、clsx、tailwind-merge
  • 使用 dangerouslySetInnerHTML
  • 不在允許清單內的檔案類型。只收 .tsx、.ts、.json、.md、.css、.svg、.png,所以 *.sh、*.mjs 這類檔案都會被擋。安裝過程不會執行任何腳本
  • 不收的檔名,放在哪一層都一樣(1.8.4 起):package.json 與 lockfile(package-lock.json、yarn.lock、pnpm-lock.yaml 等),plugin 不安裝依賴,只能用白名單套件;tsconfig.json/jsconfig.json 會改變 renderer 的編譯設定
  • 路徑逃脫(含 .. 的路徑)
  • 缺少 notecraft-plugin.json 或 renderer.tsx
  • plugin 要求的 NoteCraftApp 版本(manifest 的 engines)與你目前的版本不合,會提示你先升級

檢查都通過後,問你一次:

text
這會把上述檔案寫進你的專案,並在 build 與瀏覽器中執行。確定安裝?[y/N]

NoteCraftApp 不會執行任何安裝腳本,也不會跑 npm install;plugin 只能用 app 已經內建的套件。

裝完之後

安裝目錄裡會多一份 .installed.json,記錄來源網址、版本參照與實際的 commit,方便日後追溯;從本機資料夾安裝的只記 local:<資料夾名>,不記絕對路徑。終端機會印出一段可以直接貼進 .notecraft/plugins.json 的映射。想一步完成,加 --apply:

終端機
npx notecraftapp install-plugin er-diagram-renderer --apply "**/*.er.json"

同一個 plugin 已經裝過時會問要不要覆寫;--force 直接覆寫。升級 plugin 就是用 --force 重裝一次。

CI 與移除

非互動環境(例如 CI)沒辦法回答確認,指令會直接結束。確定要裝就加 --yes 略過確認:

終端機
npx notecraftapp install-plugin er-diagram-renderer --yes

移除用 --remove:

終端機
npx notecraftapp install-plugin --remove er-diagram-renderer

它會刪掉 .notecraft/plugins/<id>/,但不會改你的 plugins.json。如果還有規則指向這個 plugin,會出現警告,因為指到沒安裝的 plugin 會讓下次 build 失敗,記得自己刪掉那幾條規則。只想暫時關掉、不移除,見啟用與停用。

其他旗標(--as、--dir)見 CLI。

在 GitHub 上修改這一頁