前端JavaScript模块化解析之ESModule用法示例_javascript技巧

// foo.jsexport const name = "why"export const age = "18"

// main.jsimport {name,age} from "./foo.js"console.log(name)console.log(age)

模块化生效的两个前提条件

// 导入方式// 1.导入方式1:普通导入import {name,age,foo,Person} from "./foo.js"// 2.导入方式二:起别名import {name as fName,age as fAge,foo as fFoo} from "./foo.js"// 3.导入方式三:将所有哦的内容放到一个标识符中import * as foo from "./foo.js"console.log(foo.name)console.log(foo.age)console.log(name)console.log(age)

当我们某个目录下有很多js文件,导出了很多工具方法如下

// utils/math.jsfunction add(a,b){ return a+b;}function sub(a,b){ return a-b}export { add, sub}

// utils/format.jsfunction timeFormat(){ return "2222-12-12"}function priceFormat(){ return "222.22"}export { timeFormat, priceFormat}

然后在main.js中引入这些模块的函数,代码会变的很麻烦如下

// main.jsimport {add,sub} from "./utils/math.js"import {timeFormat,priceFormat} from './format.js'

因此一般在utils 目录下会统一定义一个index.js用来将该目录下的所有需要导出的变量进行一个统一导出。如下这样mian.js就可以只导入utils/index.js即可

// utils/index.js// 导出方式一import {add,sub} from './math.js'import {timeFormat,priceFormat} from './format.js'export {add,sub,timeFormat,priceFormat}

导出方式一还是显得太复杂,可以结合使用

// utils/index.js// 导出方式二:export {add,sub} from './math.js'export {timeFormat,priceFormat} from './format.js'// 如果要全部导出可如下写法// 导出方式三:export * from './math.js'export * from './format.js'

当写的某一个变量,是非常常用的时候,可以使用默认导出。默认导出的方式如下

// foo.jsconst name = "zxh"const age = 18 const foo = 'foo value'// 1.默认导出的方式一:export { name, age, foo as default}// 2.默认导出的方式二:常见export default foo// 注意默认导出只能有一个

main.js在导入默认导出的变量时 如下使用

// 不用进行结构,可自定义接收的变量名 实际上是将 foo.js中的 foo赋值到aaa上import aaa from './foo.js'console.log(aaa)

如下代码,在执行的时候是同步执行的,首先浏览会先将要导入的文件下载下来,进行解析,然后才会执行后续的代码。

import {name,age,foo} from './foo.js'console.log("导入的代码没有解析完之前,后续的代码是不会运行的")

如果希望异步执行:比如页面初始化的时候并不需要用到导出的函数,只是在特定时候才需要使用。那么就可以使用import函数来进行异步执行

import("./foo.js").then(res=>{ console.log("res:",res.name)})console.log("main.js 执行成功")

// 查看控制台输出,可以看出是异步执行main.js 执行成功res:zxh

需要重点提醒一下:导出的变量,是不允许在导入端被修改的如下

// foo.jsexport let name = "zifeiyu"

import {name} from "./foo.js"// 这里修改是会报错的name = 333

// 控制台报错Uncaught TypeError: Assignment to constant variable. at main.js:3:6

// foo.jsexport let name = "zifeiyu"setTimeout(() => { name = "Kobe"},100)

// main.jsimport {name} from "./foo.js"console.log(name)setTimeout(()=>{ console.log(name)},2000)

可以看到控制台输出,说明导出方可以修改这个值

能否实现呢?得分情况

# 在一个干净的目录下# 1.通过npm帮我们初始化一下项目,也就是生成 package.jsonnpm init# 2.要使用webpack 需要安装 webpack 和 webpack-clinpm install webpack webpack-cli -D# 3.新建目录src,因为webpack默认的打包入库是 src/index.js

编写几个js进行互相引用这边案例是打算

// src/foo.jsconst fooName = "foo"const fooAge = 18// commonjs导出module.exports = { fooName, fooAge}

// src/bar.jsconst barName = "foo"const barAge = 18// esmodule导出export{ barName, barAge}

// src/index.jses moduleimport { fooName, fooAge } from "./foo"console.log(fooName, fooAge)// commonjs 导入const {barName,barAge} = require('./bar')console.log(barName, barAge)

# 打包 会在当前命令所在目录下 创建一个dist文件夹 dist文件夹下会有一个main.jsnpx webpack

在当前目录下创建index.js 对打包后的js进行引用即可

浏览器访问可以看到正常输出,说明互相引用是可以的。

具体原理还得看main.js webpack打包出来的文件

到此这篇关于前端JavaScript模块化解析之ESModule用法示例的文章就介绍到这了,更多相关JS模块化ESModule内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!


本文地址: https://www.earthnavs.com/jishuwz/420b30dbdade6e972a9e.html
全局中部横幅
虫虫联盟

中国最大的游戏安全漏洞测试平台,免费学习交流基地,最新游戏程序安全漏洞发布官网。

连接高校和企业

蓝桥云课是国内领先的IT在线编程及在线实训学习平台,专业导师提供精选的实践项目,创新的技术使得学习者无需配置繁琐的本地环境,随时在线流畅使用。以就业为导向, 提供编程、运维、测试、云计算、大数据、数据库等全面的IT技术动手实践环境, 提供Linux、Python、Java、C语言、Node.js、Hadoop、PHP、Docker、Git、 R、SQL、MongoDB、Redis、Swift、Spark等千门热门课程。

RSSHub

EverythingisRSSible🧡

豆瓣电影

豆瓣电影提供最新的电影介绍及评论包括上映影片的影讯查询及购票服务。你可以记录想看、在看和看过的电影电视剧,顺便打分、写影评。根据你的口味,豆瓣电影会推荐好电影给你。

行业AI先锋

华为云提供稳定可靠、安全可信、可持续发展的云服务,致力于让云无处不在,让智能无所不及,共建智能世界云底座。助力企业降本增效,全球300万客户的共同选择。7x24小时专业服务支持,5天内无理由退订,免费快速备案。

NamePre

NamePre是一家国内领先的全网域名释放拍卖平台,平台专注于为国内外客户提供集域名托管、域名释放、域名拍卖、域名结算、域名竞价等为一体的服务体验。NamePre致力于为中小米农服务,让天下没有难卖的域名。

翱联旅游网

翱联旅游网是您一站式的旅行专家,致力于为您打造无与伦比的旅游体验。在这里,您将开启一段精彩纷呈的探索之旅。我们拥有海量的旅游资源,涵盖全球热门目的地以及小众秘境,无论是浪漫的海滨度假、神秘的古老遗迹、壮丽的山川湖泊,还是充满异域风情的城市漫步,翱联旅游网都能满足您的多元需求。

11资源网

提供各种虚拟资源,虚拟货源,精品资源,源码下载,热门软件,知识付费课程,网创教程,网盘资源合集分享下载。副业项目教程,副业网创资讯,各类稀缺资源分享下载

万汇资源网

万汇资源网(dosxs.com)专注于网络资源分享,提供电商技术教程,网站源码,网站模板,电商网赚教程,脚本工具,应用程序,我们致力打造一个优质的网站资源分享平台。

千寻网

千寻网导航是一个集合众多网站的网址导航站点,包含了各类网站的分类导航,如资源博客、网址导航、影视视频、电影短剧、网路资讯等,涵盖了网民日常使用的各类网站