跳至內容
Astera Technology

離開原工作站後,包能否獨立重建?

在獨立集合核 helper 路徑,亦真正試可編輯來源再生成。

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

訂判斷及所需輸入

題內應用參考 /original-workstation/helper.js。假設原環境提供它,輸入三得六,但未證明獨立包可用。更正載入器只讀所附包集合,原例欠 helper 就停;不查看真正檔案系統。

已填本地測試工作表
情況輸入 JSON
原例測試{"portableReference":false,"helperBundled":false,"editableTemplate":true}
下載可編輯 CSV ↓

跑所附比較

完整包用相對 helper 及可編輯範本,先跑×2 得六,再把範本重編為×3,真正再生成九。只有已編或已呈現結果、沒有範本,做不完此再生成要求。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"isolatedReady":true,"originalResult":6}
所需路徑{"isolatedReady":false,"reason":"missing-helper"}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    const files=new Map([['app.js','module.exports=require("'+(i.portableReference?'./helper.js':'/original-workstation/helper.js')+'");']]);
    if(i.helperBundled)files.set('./helper.js','module.exports=x=>x*2;');
    if(i.editableTemplate)files.set('template.src','module.exports=x=>x*{{factor}};');
    const outside=new Map([['/original-workstation/helper.js','module.exports=x=>x*2;']]);
    const load=(name,allowOutside)=>{const source=files.get(name)??(allowOutside?outside.get(name):undefined);if(source===undefined)throw new Error('missing-helper');const module={exports:{}};Function('module','require',source)(module,n=>load(n,allowOutside));return module.exports;};
    if(!corrected)return {isolatedReady:true,originalResult:load('app.js',true)(3)};
    let original;try{original=load('app.js',false)(3);}catch{return {isolatedReady:false,reason:'missing-helper'};}
    if(!files.has('template.src'))return {isolatedReady:false,reason:'missing-editable-template',originalResult:original};
    files.set('./helper.js',files.get('template.src').replace('{{factor}}','3'));
    return {isolatedReady:true,originalResult:original,regeneratedResult:load('app.js',false)(3)};
  };
const cases=[{"input":{"portableReference":false,"helperBundled":false,"editableTemplate":true},"corrected":false,"expected":{"isolatedReady":true,"originalResult":6}},{"input":{"portableReference":false,"helperBundled":false,"editableTemplate":true},"corrected":true,"expected":{"isolatedReady":false,"reason":"missing-helper"}},{"input":{"portableReference":true,"helperBundled":true,"editableTemplate":true},"corrected":true,"expected":{"isolatedReady":true,"originalResult":6,"regeneratedResult":9}},{"input":{"portableReference":true,"helperBundled":true,"editableTemplate":false},"corrected":true,"expected":{"isolatedReady":false,"reason":"missing-editable-template","originalResult":6}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

完整獨立邊界先六、後九;只有已編內容雖可跑六,仍以 missing-editable-template 暫停。源碼字串及集合全是固定假設材料。

  1. 只載明列包內材料
  2. 跑獨立初始結果
  3. 由保留來源改動再生成

不掃主機依賴,也不執行任意外來項目。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
獨立再生成材料齊備{"portableReference":true,"helperBundled":true,"editableTemplate":true}{"isolatedReady":true,"originalResult":6,"regeneratedResult":9}
只有已呈現或已編結果{"portableReference":true,"helperBundled":true,"editableTemplate":false}{"isolatedReady":false,"reason":"missing-editable-template","originalResult":6}
下載可編輯 CSV ↓

原例在原環境跑到六,可證明能移交獨立使用嗎?

查看參考答案

不能,獨立包欠 helper。須有可對到的材料,並證明所需來源修改可再生成,不靠原環境。

相關資源

度身訂造系統開發 →