我感觉这是不可能的,但是es6导入脚本是否可以通过任何方式获取自身的路径,或者是否没有其他方法可以知道从其下载的域?

我要完成的工作是在用户包含我图书馆站点中的脚本时打印警告

// usercode.js
import foolib from 'https://foolib.org/dist/foolib.js';


// foolib.js

if (location.hostname !== 'foolib.org' && selfurl.hostname === 'foolib.org') {
  console.warn(`referencing this code directly from foo.com is garanteed to break.
     Use your own copy or a versioned CDN`);
}


请注意,使用脚本标签并没有正式的方法,但是脚本可以扫描所有现有的脚本标签,并查看在其关心的域中是否有对该脚本的引用

if (location.hostname !== 'foolib.org' &&
    [...document.querySelectorAll('script')].findIndex(
        s => s.src === 'https://foolib.org/dist/foolib.js'
    ) >= 0) {
  console.warn('...');
}


我正在尝试找到一种方法来对es6模块执行相同的操作。

最佳答案

您可以从import.meta对象访问此信息:



<script type="module">
  console.log( import.meta );
</script>

10-06 15:31