博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈import和require的区别
阅读量:6584 次
发布时间:2019-06-24

本文共 1314 字,大约阅读时间需要 4 分钟。

粗鄙苟谈,欢迎评论区指正

import和require都是node编程中最重要的思想就是模块化的体现。

历史

最开始的开端js发明出来就是为了在浏览器上做个动效,做个表单提交,定义为浏览器应用程序的语言,但之后由Mozilla工程师Kevin Dangoor于2009年1月开始构建的CommonJS出现了,CommonJS API定义很多普通应用程序(主要指非浏览器的应用)使用的API,目标是在浏览器外部为JavaScript指定生态系统。

随着2009年有个叫Ryan Dahl创造了node.js项目,Node.js允许通过JavaScript和一系列模块来编写服务器端应用和网络相关的应用。Node.js已经有数十万模块,它们可以通过一个名为npm的管理器免费下载。

而NODE和NPM都是遵循CommonJS规范(做了一些取舍,填了一些新东西)应运而生的。

import和require

前面讲了很多历史,很迷糊,而且与本文要讲的并没有啥相关性。

别着急,少年。

之前说了node编程中的模块系统是基于CommonJS规范的,在CommonJS中,有一个全局性方法require(),用于加载模块。比如node编程里要加入一个HTTP模块,如下:

const http = require('http')exports.http = httpmodule.exports = http复制代码

而import用于加载模块就比较多样了

import http from 'http'import {default as http} from 'http'import * as http from 'http'import {get} from 'http'import {getList as get} from 'http'import http, {getList} from 'fs'export default httpexport const httpexport function getListexport {getList, get}export * from 'http'复制代码

区别

命令 规范 调用 本质 特点
require CommonJS规范 运行时调用 赋值过程 非语言层面的标准。 社区方案,提供了服务器/浏览器的模块加载方案。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
import es6+的语法标准 编译时调用 解构过程 语言规格层面支持模块功能。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定

关于规范

import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法。

关于调用

  1. require的引用可以在代码的任何地方。
  2. import语法规范上是放在文件开头。

关于本质

  1. require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
  2. 目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require

转载地址:http://yyano.baihongyu.com/

你可能感兴趣的文章
小知识记录
查看>>
图片转流
查看>>
HTML 标签说明
查看>>
java笔记八:IO流之字符流与字符缓冲流
查看>>
Docker 命令收集
查看>>
myeclipse注册码生成器
查看>>
iOS App间相互跳转漫谈 part2
查看>>
ISCC2014 writeup
查看>>
什么是企业内训
查看>>
H3C设备之OSPF DR选举
查看>>
List grantee right in oracle
查看>>
Activity生命周期
查看>>
深度解析Istio系列之安全模块篇
查看>>
Linux 系统 审计
查看>>
性能测试 vbs使用(一)
查看>>
jQuery基础
查看>>
BZOJ5312:冒险——题解
查看>>
echarts,两点连线,中间断裂
查看>>
samba简易配置
查看>>
庆祝在CNBlogs开博!
查看>>