当前位置: 首页 > news >正文

JavaScript 学习-47.export 和 import 的使用

前言

JavaScript 的每个.js文件都是独立的,在开发一个项目会有很多的.js文件,有些是公共的方法,可以单独放到一个.js文件中,其它的文件去调用公共方法。
但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持类(class),所以也就没有"模块"(module)了。

export导出模块

在es6以前,还没有提出一套官方的规范,从社区和框架推广程度而言,目前通行的javascript模块规范有两种:CommonJS 和 AMD
ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。

这里主要介绍ES6 里面的export 和import 使用。
export 语句用于创建 JavaScript 模块以从模块中导出函数、对象或原始值,以便其他程序可以通过该 import 语句使用它们。
导出的模块 取决于您是否声明它们。导出语句不能用于嵌入式脚本。

// 导出单个
export let name1, name2, …, nameN; // also var, const
export let name1 = …, name2 = …, …, nameN; // also var, const
export function functionName(){...}
export class ClassName {...}

// 导出列表
export { name1, name2, …, nameN };

// 重命名导出
export { variable1 as name1, variable2 as name2, …, nameN };

// Default exports
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };

// Aggregating modules
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;
export { default } from …;

export导出示例

// export features declared earlier
export { myFunction, myVariable }; 

// export individual features (can export var, let,
// const, function, class)
export let myVariable = Math.sqrt(2);
export myFunction() { ... };

import 导入

import语法声明用于从已导出的模块、脚本中导入函数、对象、指定文件(或模块)的原始值。
import的语法跟require不同,而且import必须放在文件的最开始,且前面不允许有其他逻辑代码,这和其他所有编程语言风格一致。

import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";

import 示例

import { cube, foo, graph } from 'my-module.js';

graph.options = {
    color:'blue',
    thickness:'3px'
};
 
graph.draw();
console.log(cube(3)); // 27
console.log(foo);    // 4.555806215962888

使用示例

目录结构

└─src
    └─js
      └─ext.js
      └─main.js 
       
└─index.html

在ext.js 文件写一些公共方法

export const m = (function(){

    return {
        hello: function(){
            return 'hello ,,,,'
        },
        world: function(){
            return 'world !!!!!!!!'
        }
        
    }

})()

在main.js 文件中导入并调用方法

import {m} from './ext.js'
console.log(m.hello())

index.html只需导入main.js文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script src="./src/js/main.js"></script>
    
</body>
</html>

打开浏览器会出现Uncaught SyntaxError: Cannot use import statement outside a module

当js文件作为模块导入的时候,需在script标签声明type="module"类型

 <script type="module" src="./src/js/main.js"></script>

虽然只导入了一个main.js,加载的时候还是会加载到ext.js 文件

相关文章:

  • Kafka 生产者
  • Spring核心IOC的核心类解析
  • 【数据挖掘】恒生金融有限公司2023届秋招数据ETL工程师笔试题解析
  • 软件测试分类
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • var、let、const的区别
  • 机器学习(二十九):LightGBM 模型
  • node.js 使用教程-2.Gulp 打包构建入门与使用
  • UMLChina建模竞赛第3赛季第12轮:歌曲知识
  • springboot二手交易平台毕业设计源码290915
  • MySQL-触发器
  • 使用 Jest 对 Vuex 模块进行单元测试
  • 常用的芯片封装与PCB封装总结
  • 操作系统 —— 进程间的通信
  • 管理运筹学的一些知识点
  • Brief introduction of how to 'Call, Apply and Bind'
  • emacs初体验
  • JavaScript HTML DOM
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Promise初体验
  • Python学习之路13-记分
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Vim 折腾记
  • Vue 重置组件到初始状态
  • 代理模式
  • 蓝海存储开关机注意事项总结
  • 双管齐下,VMware的容器新战略
  • 微信小程序:实现悬浮返回和分享按钮
  • 我与Jetbrains的这些年
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #define 用法
  • #考研#计算机文化知识1(局域网及网络互联)
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (java)关于Thread的挂起和恢复
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (原)Matlab的svmtrain和svmclassify
  • (转)关于多人操作数据的处理策略
  • ***监测系统的构建(chkrootkit )
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 设计模式初探
  • .NET企业级应用架构设计系列之开场白
  • .Net语言中的StringBuilder:入门到精通
  • [8481302]博弈论 斯坦福game theory stanford week 1
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [android] 请求码和结果码的作用
  • [BJDCTF2020]The mystery of ip
  • [BT]BUUCTF刷题第8天(3.26)
  • [gdc19]《战神4》中的全局光照技术