我想从另一个script标签导入。
<script type="module"> export default "str" </script> <script type="module"> import foo from "????" console.log(foo) // str </script>
我应该在“???"中写什么?
dwthyt8l1#
这是不可能的。ModuleSpecifier(from后面的)必须是一个字符串,并且需要指向一个 * 独立的JavaScript文件 *。它不能引用页面上的另一个脚本标签,只能引用一个文件。通常,页面上的<script type="module">只使用 * 一次 *,并且用于调用其他模块。例如,您通常会看到或拥有类似于以下内容的内容,而不是您的原始代码:第一个
from
<script type="module">
rjjhvcjd2#
最好的答案是正确的,这是不可能的。但是有一个import()函数可以从一个url导入es模块。并且URL.createObjectURL()方法会通过javascript源代码创建一个url。所以解决方法是:
import()
URL.createObjectURL()
<!-- Avoid executing the code below by add type=text/template --> <script type="text/template" id="test"> export default 'foo'; </script> <script type="module"> const test = await import( URL.createObjectURL( new Blob( [document.getElementById('test').innerText], {type: 'application/javascript'}, ) ) ); console.log(test.default); </script>
2条答案
按热度按时间dwthyt8l1#
这是不可能的。ModuleSpecifier(
from
后面的)必须是一个字符串,并且需要指向一个 * 独立的JavaScript文件 *。它不能引用页面上的另一个脚本标签,只能引用一个文件。通常,页面上的
<script type="module">
只使用 * 一次 *,并且用于调用其他模块。例如,您通常会看到或拥有类似于以下内容的内容,而不是您的原始代码:第一个
rjjhvcjd2#
最好的答案是正确的,这是不可能的。但是有一个
import()
函数可以从一个url导入es模块。并且URL.createObjectURL()
方法会通过javascript源代码创建一个url。所以解决方法是: