我如何导入npm模块(例如jquery),但没有webpack?
import * as $ from '../node_modules/jquery/dist/jquery.js';
它给我$没有定义
问题已更新
这个HTML:
<html>
<body>
<p>hola</p>
<script src="js/test.js" type="module"></script>
</body>
</html>
和这个js:
import * as $ from '../node_modules/jquery/dist/jquery.js';
console.log($());
给我控制台
TypeError:$不是函数
,但是如果我在出现此消息后在控制台中写:
console.log($()); 它按预期工作
$(){}:对象{jQuery:“ 3.4.1”,构造函数:jQuery(),长度:0,…}
我没有使用任何捆绑软件,在浏览器中使用
除非jquery.js
您要导入的文件包含其中export
,否则您将无法使用import
它来导入内容。(您可以使用import
它来加载它,尽管可能不是一个好主意,请参见下文。)本机浏览器支持仅处理从以模块形式编写的内容中导入。
import * as $ from '../node_modules/jquery/dist/jquery.js'; console.log($());
给我控制台
TypeError:$不是函数
这样做的原因是,当您* as $
在中使用时import
,您正在为模块导入模块名称空间对象。模块名称空间对象永远不可调用,它是一个具有用于模块导出的属性的对象。您可以使用* as x
语法来导入任何脚本,即使没有被编写为模块的脚本也因此没有export
任何位置,但是您得到的只是一个空对象,因为未被编写为模块的脚本没有任何对象。出口。
但是如果在出现此消息后我在控制台中编写:
console.log($());
它按预期工作
这是因为jQuery$
使用window
global创建了一个global。您无法$
在模块中使用该全局变量的唯一原因是,您已将其$
用作模块命名空间对象的标识符,从而对其进行了阴影处理。
这可能会起作用:
import '../node_modules/jquery/dist/jquery.js';
...因为这将加载并运行jQuery脚本,从而创建一个全局脚本。由于不会使用名称声明模块本地标识符$
,如果$
在模块中使用它,它将使用jQuery创建的全局 标识符$
。
但是我import
不习惯使用加载非设计为模块的脚本。取而代之的是,我想我只是使用script
标记来包含jQuery ,然后使用global分别使您的模块成为可能$
。
<script src="node_modules/jquery/dist/jquery.js"></script>
<script src="js/test.js" type="module"></script>
(或者找到一个模块包装的jQuery版本;我不特别知道它,但是它可能存在。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句