靜態解析與改寫 · 不執行程式碼
只解析、排版與壓縮;不執行,也不做型別檢查。
格式化與診斷使用 Babel 或 Babel-Flow parser;Minify 則直接交給 Terser,Flow 型別語法不在其輸入範圍。兩條路徑都不會 eval、import 或執行你貼上的程式碼,也不會驗證執行結果。
JavaScript 原始碼
依操作選擇 parser
建立語法樹,不執行
Prettier 或 Terser 輸出
不呼叫 eval 或 Function constructor,不匯入使用者 module、不注入 DOM,也不觸發原始碼裡的網路請求或其他 runtime side effect。
語法通行證
Parser 選項只影響格式化與診斷。
Babel 適合現代 JavaScript;Babel-Flow 額外辨識 Flow annotation,但不執行 Flow type checker。Minify 使用 Terser 自己的 JavaScript parser,含 Flow 型別的輸入會失敗。
export { load } from './api.js'Babel · Babel-Flowconst value = await load()Babel · Babel-Flowprofile?.team?.nameBabel · Babel-Flowclass Store { ready = false }Babel · Babel-Flow`/users/$` · /a+b/giBabel · Babel-Flowfunction f(value: string): number僅 Babel-Flow;Terser 不接受同一份原始碼,兩種輸出目的
格式化方便閱讀;壓縮為單一輸入縮小體積。
格式化
檢閱export async function load(id) {
const response = await fetch(`/items/${id}`);
return response.json();
}- 保留識別字與註解,統一縮排、空白與換行
- 可選 2/4 空格或 Tab;print width 是偏好值,不是硬上限
- Prettier standalone 不讀取專案的 config、ignore 或額外 plugin
壓縮
交付前檢查export async function load(t){const n=await fetch(`/items/${t}`);return n.json()}- Terser 固定執行兩輪 compress,可能移除、合併或改寫可判定的程式碼
- mangle 預設開啟,只重新命名可處理的識別字;不是加密,也不啟用 property mangle
- source map 只會以 data URL 內嵌;sourcesContent 可選擇是否放入完整輸入
壓縮風險清單
Terser 的最佳化假設,需要用真實程式流程驗證。
Parser 錯誤記錄
遇到不合法的 token,只提供診斷,不嘗試執行。
const user = { name: 'Ada' };
if (user?.name {
console.log(user.name);
}條件以 ( 開始,卻在補上 ) 前先遇到 {。Prettier 的錯誤訊息會附行列與原始碼片段;本站的結構化 line/column 欄位不一定另有值,後續位置也可能只是連鎖錯誤。