Javascript 从浏览器中es6模块中无法识别的节点_模块导入
我正在尝试在我的web应用程序中使用lodash。我在本地项目中使用npm安装了lodash 我计划在代码中使用ES6模块 这是我的main.js文件:Javascript 从浏览器中es6模块中无法识别的节点_模块导入,javascript,lodash,es6-modules,Javascript,Lodash,Es6 Modules,我正在尝试在我的web应用程序中使用lodash。我在本地项目中使用npm安装了lodash 我计划在代码中使用ES6模块 这是我的main.js文件: import * as _ from "lodash"; _.each([1, 2, 3, 4], (i) => { console.log('index each ' + i); }); 我已将其包含在index.html中,如下所示: <script src="js/main.js", type="module"&g
import * as _ from "lodash";
_.each([1, 2, 3, 4], (i) => {
console.log('index each ' + i);
});
我已将其包含在index.html中,如下所示:
<script src="js/main.js", type="module"></script>
但我在浏览器控制台中遇到以下错误
未捕获类型错误:未能解析模块说明符“lodash”。
相对引用必须以“/”、“/”或“./”开头
注意:我不想使用任何捆绑工具 如果您不希望使用任何捆绑工具,则需要在
node\u modules
中提供相对于包含import语句的JavaScript文件的lodash文件夹路径
如果您不希望使用bundler,那么从特定文件导入您需要的功能也是值得的。例如:
import _each from '../node_modules/lodash/each'
最终你不能像那样在浏览器上使用JS模块。这些模块用于webpack或其他捆绑包 尝试模块lodash es
import each from '../node_modules/lodash-es/each.js'
<强> 2021,请考虑以下(2018)的声明:< /强>
不幸的是,即使大多数以ES6模块格式编写或发布的库也无法工作,因为它们以Transpiler为目标,并且依赖于Node.js生态系统。为什么这是个问题使用诸如从“lodash”导入之类的裸模块路径当前无效,浏览器不知道如何处理它们。 以及(2017年5月)之前的声明: 当前不支持“裸”导入说明符 有效的模块说明符必须与以下之一匹配:捆绑程序促进了浏览器尚不支持的“裸导入”的使用。除非您捆绑代码,否则我建议使用@Asler提出的解决方案。此外,目前正在做大量工作来研究浏览器中“裸导入”的实现,如果您想监控整体进度,请遵循此操作。如果您尝试导入
css
文件,请确保在导入语句中提到.css
。我尝试了您的建议,但没有成功。使用import\u each from'../node\u modules/lodash/each'
给出了一个404,使用import\u each from'../node\u modules/lodash/each.js'
导致以下错误:语法错误:请求的模块“../node\u modules/lodash/each.js”没有提供名为“default”的导出,甚至尝试了此import*as\ufrom”“./node\u modules/lodash/lodash.js”
但是得到了TypeError:\uu.each不是一个函数。在console.log(\u)
上,我在控制台上得到了一个Module对象。您的导入语句不应该是import\ufrom./node\u modules/lodash/lodash.js吗?”“
?@RobertMennell,我尝试使用您的建议导入lodash,但这给了我以下错误:“SyntaxError:请求的模块“../node\u modules/lodash/lodash.js”没有提供名为“default”的导出”为什么使用节点模块而不是CDN分发版?@RobertMennell,lodash不是我唯一需要使用的图书馆。我有其他的库依赖项,我怀疑我会在CDN发行版上得到它们。我甚至有一些内部库。内部库应该由您提供服务,是的,但是如果它有CDN,您应该使用CDN,因为它可以卸载并防止您暴露节点_模块。@RobertMennell是否有一个链接可以帮助查找CDN上托管的所有/大部分JS库?那会有帮助的。如果没有,我可以在谷歌上恢复手动搜索。应该有很多CDN,但是其他CDN确实存在,并且在webpack中有许多listshow可以使用它们?所有这些都很好,直到模块包含指向另一个包的导入语句