亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 ES6 模塊導入表達式不適用于帶有某些路徑參數的資產文件夾中的 json 文件?

為什么 ES6 模塊導入表達式不適用于帶有某些路徑參數的資產文件夾中的 json 文件?

慕妹3146593 2023-04-27 17:11:59
我遇到了一個似乎不合邏輯的 ES6 導入情況,我想知道為什么以下導入在 Vue.js SFC 的方法中不起作用:const fullContentFile = '@/assets/rules/rules.json'import(fullContentFile).then(data => console.log('data 8: ', data))它在瀏覽器的控制臺上拋出以下錯誤:Uncaught (in promise) Error: Cannot find module '@/assets/rules/rules.json'    at eval (eval at ./src/components/staboqwi lazy recursive (app.js:2117), <anonymous>:5:11)我的項目設置重現該失?。簐ue create import-issue(創建一個 Vue.js 項目并接受默認值)創建一個文件:src/assets/rules/rules.json具有以下內容:    [1,2,3,4,5]在 App.vue 中添加以下created()方法:created() {  // The first three imports work always:  import('@/assets/rules/rules.json').then(data =>    console.log('data 1: ', data)  )    const file = 'rules'  import('@/assets/rules/' + file + '.json').then(data =>    console.log('data 2: ', data)  )  const fileName = 'rules.json'  import('@/assets/rules/' + fileName).then(data =>    console.log('data 3: ', data)  )  // The next two imports break compilation if used within htmlcars project  const fileName2 = 'rules/rules.json'  import('@/assets/' + fileName2).then(data =>    console.log('data 4: ', data)  )  const fileName3 = 'assets/rules/rules.json'  import('@/' + fileName3).then(data => console.log('data 5: ', data))  // Those imports don't work:  const contentFile = '/assets/rules/' + file + '.json'  import('@' + contentFile).then(data => console.log('data 6: ', data))  const atContentFile = '@/assets/rules/' + file + '.json'  import(atContentFile).then(data => console.log('data 7: ', data))  const fullContentFile = '@/assets/rules/rules.json'  import(fullContentFile).then(data => console.log('data 8: ', data))},從導入的變體中可以看出,唯一的區別是作為字符串提供給路徑參數的內容以及存儲在常量/變量中的內容。我確實花了 2 個晚上試圖在 Google 和 stackoverflow 上找到答案。也許比我有更多 javascript 背景的人可以解釋最后三個導入與之前的導入相比有什么問題。一個有趣的副作用是,如果將該方法添加到它的文件中(不要忘記添加) ,那么第四次和第五次導入會破壞htmlcars項目的編譯。如果注釋掉項目將構建。這是為什么?導入與編譯失敗的 scss 文件完全無關。create()App.vuesrc/assets/rules/rules.json
查看完整描述

1 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

你需要知道,import()今天常見的 JS 項目(包括 Vue)中的語句是在構建時由 Webpack 處理的,而不僅僅是在運行時

在構建時,Webpack 需要知道導入了哪個文件,以便它可以在運行時使用它(transpile JS、預處理 SCSS 等)。但是因為這個導入是動態的并且 Webpack 不能執行你的代碼,所以它不可能知道傳入的參數的import()?確切含義。它只能解析代碼并做出猜測——?“這里可以導入哪個文件?”?(基于你的文件系統的內容)

因此,從“JavaScript 執行”的角度來看示例并比較案例是沒有意義的,因為什么有效,什么無效最終取決于 Webpack 解析內部表達式并做出正確猜測的能力()......

查看完整回答
反對 回復 2023-04-27
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號