跳至內容
Astera Technology

不改程序包,沿執行設定換目標

執行時讀設定與生成時固定值,各跑一次。

下載完整個案資料及參考答案 ↓

訂判斷及所需輸入

假設包固定 siteA,所附執行 JSON 卻要求 siteB。固定讀法仍 siteA;更正執行時取 config.target,不改包源碼也得 siteB。

已填本地測試工作表
情況輸入 JSON
原例測試{"runtimeFile":"{\"target\":\"siteB\"}"}
下載可編輯 CSV ↓

跑所附比較

兩種本地固定讀法真正執行,只核題內機制,不代表真主機功能或每項即時設定都可改。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"target":"siteA","bundleEdited":false}
所需路徑{"target":"siteB","bundleEdited":false}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(i.runtimeFile===null)return {held:true};let config;try{config=JSON.parse(i.runtimeFile);}catch{return {held:true,reason:'invalid-json'};}if(typeof config?.target!=='string'||!config.target)return {held:true};
    const source=corrected?'return config.target;':'return "siteA";';
    return {target:Function('config',source)(config),bundleEdited:false};
  };
const cases=[{"input":{"runtimeFile":"{\"target\":\"siteB\"}"},"corrected":false,"expected":{"target":"siteA","bundleEdited":false}},{"input":{"runtimeFile":"{\"target\":\"siteB\"}"},"corrected":true,"expected":{"target":"siteB","bundleEdited":false}},{"input":{"runtimeFile":"{\"target\":\"siteC\"}"},"corrected":true,"expected":{"target":"siteC","bundleEdited":false}},{"input":{"runtimeFile":null},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

後來 siteC 檔得 siteC;執行輸入欠缺就停,不用未訂的 siteA 頂替。

  1. 核在哪一步讀設定
  2. 用所附檔執行
  3. 核真正目標

改包不是執行設定測試。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
換另一個執行目標{"runtimeFile":"{\"target\":\"siteC\"}"}{"target":"siteC","bundleEdited":false}
執行設定檔欠缺{"runtimeFile":null}{"held":true}
下載可編輯 CSV ↓

執行設定檔可令固定讀法跟着改嗎?

查看參考答案

不能,仍 siteA。須選真正讀執行輸入的包,再實試結果。

相關資源