在NextJS中new URL为啥和标准不一样呢?-灵析社区

抠香糖

测试代码很简单如下: const logo = new URL('http://up1.yii.so/jianli/static/square.js', import.meta.url); // import.meta.url is file:///Users/liwei/Downloads/app/web3/next.v2/src/app/optimizing/script/urlimports/page.tsx console.log(logo.href); // output: _next/static/media/square.251a1772.js 我不太理解,为啥:`http://up1.yii.so/jianli/static/square.js` \+ `file:///Users/liwei/Downloads/app/web3/next.v2/src/app/optimizing/script/urlimports/page.tsx` = `_next/static/media/square.251a1772.js` 我先找了mdn,在`new URL()`中关于第一个参数`url`如下描述: > 如果 `url` 是相对 `URL`,则会将 `base` 用作基准 `URL`。如果 `url` 是绝对 `URL`,则无论参数 `base` > 是否存在,都将被忽略。 显然nextjs中的`new URL()`和web标准不一样,但是文档又没有提到,所以想问下nextjs中的`new URL()`是什么标准?

阅读量:197

点赞量:10

问AI
你理解的是对的。 不过在一些框架中会允许你使用url进行模块导入(不限于next,原理就是"Webpack BuildHttp" (https://link.segmentfault.com/?enc=cByXt4oKNyCfCEMckIc3Ag%3D%3D.oqrEExGGV7REo0cD4ACUliW%2BjU%2FT8%2BOu%2BWQpGtemCgbnLg7OlJ7xmROL2l84q%2FaNfrOOq27Jz3%2BgUs2a5rKB0FpHgPedWXt8T3w1i0LztDU%3D)) import logo from 'https://example.com/assets/logo.png' 在next中对于远程资源也是可以这样的 const logo = new URL('https://example.com/assets/file.txt', import.meta.url) console.log(logo.pathname) // prints "/_next/static/media/file.a9727b5d.txt" 具体你可以查看 "Next Doc" (https://link.segmentfault.com/?enc=izPEG1fDxNPrg0XndNKbTg%3D%3D.gdkekTImhzlxWlnnHUmfSXHxQXkm1VzGWn3qrLUq6lxNz5RNOiFTfnSSVsYCuG9F47JJFOFbIaVaqIERzFv%2BIrRcFX6cEu3yD31AQ88n0q8%3D)