ES6中模块导入遇到的问题及其解决办法

Wesley13
• 阅读 584

"  阅读本文大概需要 5 分钟 "

ES6中模块导入遇到的问题及其解决办法

前言


今天遇到了一个小的问题,我们来看一下,情况是这样的:在没遇到过这个坑之前,如果需要引入一个模块,我通常的做法都是在HTML文件中内嵌一个script标签,并通过指定 type="module" 来实现;然而今天我却没有按照往常这样做,而是指定两个js文件,其中一个文件通过 export 暴露出需要的变量和函数,在另一个文件中通过 import 导入,结果就遇到了报错,来给各位看下报错信息:

ES6中模块导入遇到的问题及其解决办法

请各位小伙伴注意报错信息中标红的部分,接下来将我们讲解两种修复此错误的方法。

通过script标签来引入

首先 ,来看第一种方式,给各位看看我的文件目录信息:

ES6中模块导入遇到的问题及其解决办法

ES6中模块导入遇到的问题及其解决办法

其中, demo.js 文件中包含我们需要暴露的变量和函数,在 index.html 文件中,我们需要通过内嵌script标签来引入。

请看 demo.js 文件:

export let name = "shipudong"export let sayName = function () {    console.log('我的名字叫做hahaCoder')}

请看 index.html 文件:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title></head><body><script type="module">    import * as demo from './demo.js'    console.log(demo)    console.log(demo.name)    console.log(demo.sayName())</script></body></html>```

上述所有工作完成之后,我们来看看控制台结果:

ES6中模块导入遇到的问题及其解决办法

没有问题,结果显示正确,这种方式要注意的一点就是:当我们在HTML文件中引入模块的时候,切记不要忘记指定 **type = "module"**。

**Node.js中的使用
**

首先,给各位看看我的 node 版本:

ES6中模块导入遇到的问题及其解决办法

接着 ,我们来看第二种方式,上述  **demo.js ** 中的文件内容我们不做更改,继续使用,我们来新建一个 index.js 文件,其用途是引入 demo.js 文件暴露出的变量和函数,请看 index.js 中的信息:

import {name,sayName} from "./demo";console.log(name)console.log(sayName())

ES6中模块导入遇到的问题及其解决办法

我们通过如下命令:

node index.js

执行 index.js 文件,发现控制台报错,接下来我将根据控制台报错信息来给小伙伴提供两种解决方案:

01 - 使用 esm 模块


我们来打开终端,通过输入如下命令来安装 esm 模块:

npm install esm

安装成功之后,文件夹中会多出两个文件,如下图所示:

ES6中模块导入遇到的问题及其解决办法

接着我们在终端中执行如下命令:

 node -r esm index.js

我们来看看控制台信息:

ES6中模块导入遇到的问题及其解决办法

非常好,程序运行成功!

02 - 修改 package.json 文件


接下来我们来看第二种方法,我们修改 package.json 文件,修改后的文件信息如下所示:

 {  "name": "javascript2",  "version": "1.0.0",  "dependencies": {},  "type": "module",  "scripts": {    "start": "node demo.js"  }}

修改完配置信息之后,我们通过执行如下命令查看控制台信息:

node demo.js

非常好,程序运行成功!

最后我们来补充一点,其实还有一种更为简单的方法来避免这个报错信息:我们只需要将文件中所有的 js 文件后缀名改成 .mjs ,接着在终端中执行 node 命令即可,请看:

ES6中模块导入遇到的问题及其解决办法

本文最后

以上就是我今天遇到的一个小问题以及我的解决方案,希望能够对小伙伴带来一些帮助。

- End -

往期推荐

🔗

[

ES6中模块导入遇到的问题及其解决办法

【带你成为pyq最靓的仔】朋友圈九宫格(一)之图片切割篇

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg3NzAyNjExNQ%3D%3D%26mid%3D2247487724%26idx%3D1%26sn%3D1fef633603d5ca648c190f01f37adf85%26chksm%3Dcf281ec0f85f97d62d1ee0df01e38c8d5466efd0741c1177c46a40e1929fd2de83dc44b7d186%26scene%3D21%23wechat_redirect)

[

ES6中模块导入遇到的问题及其解决办法

【往事清零,未来可期】研究生入学前的50天,我干了什么“见不得人”的勾当

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg3NzAyNjExNQ%3D%3D%26mid%3D2247487554%26idx%3D1%26sn%3D986122fbe632b364f03619fd3a6d5dee%26chksm%3Dcf281e6ef85f97786ab531d3d52ce8b664579ac430770e5e32bd7b88df72e98b8c4fa6efb7df%26scene%3D21%23wechat_redirect)

[

ES6中模块导入遇到的问题及其解决办法

DNS污染以及使用镜像源中遇到的问题

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg3NzAyNjExNQ%3D%3D%26mid%3D2247487452%26idx%3D1%26sn%3D88f3c2c1fba5e410b7bfc17c615ee119%26chksm%3Dcf2801f0f85f88e662fd8b9a5ccbf7cfb9f7032399cf8b5dba205ee2e8ef8bb17a3581db54b2%26scene%3D21%23wechat_redirect)

[

ES6中模块导入遇到的问题及其解决办法

matplotlib中文乱码的两种解决方案

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg3NzAyNjExNQ%3D%3D%26mid%3D2247487152%26idx%3D1%26sn%3D176dd7a3409622deac0a165d1ef1daba%26chksm%3Dcf28009cf85f898af029a9762fc19b2a461d4953fa92f2f038706de5360ecbb2c3f3afe7622a%26scene%3D21%23wechat_redirect)

[

ES6中模块导入遇到的问题及其解决办法

毕业设计(基于TensorFlow的深度学习与研究)之总结概述篇

](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzg3NzAyNjExNQ%3D%3D%26mid%3D2247487061%26idx%3D1%26sn%3D859258bafbc7b6d0e58620a6fd87a665%26chksm%3Dcf280079f85f896feae1f077d952f75b1c1471e1042919971ad55f71a12bb21d292c39a7c336%26scene%3D21%23wechat_redirect)

本站文章搜索推荐

长按关注

ES6中模块导入遇到的问题及其解决办法

本文分享自微信公众号 - hahaCoder(hahaCoder)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Stella981 Stella981
3年前
ReactNative state更新,视图不更新的问题
开发中遇到这样的问题,我更新了state一个数组的某个元素的选中状态,打印出的数据也显示修改正确了,但是界面却没更新。例如下图点击某项修改选中状态。!(https://oscimg.oschina.net/oscnet/c3291a62b5f638d1e35dd7a719ade39f226.png)代码中之前是这样写的,结果界面没有更新。
Stella981 Stella981
3年前
JVM的基础知识点Java的内存模型
阅读文本大概需要3分钟。Java虚拟机是Java工程师必学的进阶功课,这段时间开始死磕JVM。今天梳理一下JVM的基础知识点Java的内存模型!!(https://oscimg.oschina.net/oscnet/d48bb92f83f6e209089d8c03dc2ba35cf45.png)程序计数器是什么:程序计数器是
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(