require 是 AMD规范引入方式
import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法
require是运行时调用,所以require理论上可以运用在代码的任何地方(虽然这么说但是还是一般放开头)
import是编译时调用,所以必须放在文件开头
require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
require / exports :
遵循 CommonJS/AMD,只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。
用法只有以下三种简单的写法:
const fs = require('fs')
exports.fs = fs
module.exports = fs
import / export:
遵循 ES6 规范,支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。
写法就比较多种多样:
import fs from 'fs'
import {default as fs} from 'fs'
import * as fs from 'fs'
import {readFile} from 'fs'
import {readFile as read} from 'fs'
import fs, {readFile} from 'fs'
export default fs
export const fs
export function readFile
export {readFile, read}
export * from 'fs'
通过require引入基础数据类型时,属于复制该变量。
通过require引入复杂数据类型时,数据浅拷贝该对象。
出现模块之间的循环引用时,会输出已经执行的模块,而未执行的模块不输出(比较复杂)。
CommonJS模块默认export的是一个对象,即使导出的是基础数据类型。
| 规范 | 加载方式 | 命令|特点|
|–|--|
| CommonJS/AMD |运行时加载 |require|只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化|
| ES6 | 编译时加载 |import| 支持编译时静态分析,便于JS引入宏和类型检验|
参考:https://www.cnblogs.com/myfirstboke/p/10563597.html
遵循规范require 是 AMD规范引入方式import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法调用时间require是运行时调用,所以require理论上可以运用在代码的任何地方(虽然这么说但是还是一般放开头)import是编译时调用,所以必须放在文件开头本质require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使
js中import和require的区别
ES6标准发布后,module成为标准,标准使用是以export指令导出接口,以import引入模块。但是在我们一贯的node模块中,我们依然采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。
require
它相当于module.exports的传送门,module.exports后面的内容是什么,...
本来是做后端的,拿到一个偏前端的项目,js文件里好多define和require,看的有点蒙,只能自己动手查找资源了,了解这到底是个什么,它能做什么?
1.什么是require.js?
1):require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染和其后的脚本的执行,并提供了在...
require 和 import,都是为了JS模块化使用。最近项目中,因为多人协同开发,出现了一个项目中同时使用了require 和 import 引入依赖的情况。正常情况下,一个项目中最好是对引入方式做一个规范。下面我们就来看一下require 和 import的区别:
一.require
require是Commonjs的规范,node应用是由模块组成的,遵从common...
区别2:模块的本质
require:模块就是对象,输入时必须查找对象属性
import:ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,再通过 import 命令输入(这也导致了没法引用 ES6 模块本身,因为它不是对象)
// CommonJS模块
let { exists, read...
①
require是先将依赖项加载结束,然后再执行后面的函数回调
首先第一个就是一个难点,因为
require现在是采用script标签的方式引入各个模块,所以我们不能确定何时加载结束,所以这里存在一个复杂的判断以及缓存问题。
如:.JSP文件中
CommonJS的由来
在早期没有模块化思想时代码没有很好的编写规范,导致很多代码、逻辑重复、缺乏条理性且不易管理维护,这也让很多开发者头疼不已。随着JavaScript 社区的发展,社区为JavaScript制定了相应的规范,而CommonJS规范的提出得到了大家的承认和广泛的应用,2009年CommonJS就此诞生了。
CommonJS介绍
CommonJS实现了Javascript的模块化规范,规范了模块的特性和各模块之间的相互依赖性,使得代码可以更好的编写和维护,同时提高了代码的复用性。定义每个文件
require引入和清除缓存
官方文档对
require.cache的解释:
被引入的模块将被缓存在这个对象中。 从此对象中删除键值对将会导致下一次
require 重新加载被删除的模块。 这不适用于原生插件,因为它们的重载将会导致错误。
可以添加或替换入口。 在加载原生模块之前会检查此缓存,如果将与原生模块匹配的名称添加到缓存中,则引入调用将不再获取原生模块。 谨慎使用!
require.resolve则相当于把相对路径转化成绝对路径,避免了自己手写的绝对路径跟cache里的key不一致的问题
ES6标准发布后,module成为标准,标准的使用是以export指令导出接口,以import引入模块,但是在我们一贯的node模块中,我们采用的是CommonJS规范,使用require引入模块,使用module.exports导出接口。
不把require和import整清楚,会在未来的标准编程中死的很难看。
require时代的模块
node编程中最重要的思想之一就是模块,而正是这个思...