1.ES6也叫ES2015;
2.ES6里最大的特点是js可以模块化;
3.import { stat, exists, readFile } from 'fs';表示从模块fs里导入三个函数进来;(注意fs还可以是文件路径如:'./profile.js'表示当前目录的profile.js文件,js的模块其实本质上就是一个js文件)
4.模块其实在es6里就是一个js文件,比如profile.js里全局部分声明了var profile = 'dev';那么即便其它js文件import了这个js文件也是无法访问profile变量的,
如果要访问需要在profile.js里这样声明export var profile = 'dev';
但最好不要在声明时就用export,而是最后通过export{profile,profile2,..};来一次性导出;
注意export和import都可以通过as 来为变量取别名,而且import的变量一定要是和对方export的一致;(export除了导出变量名还可以是类名或方法名)
import导入的变量是只读的,毕竟这个变量是其它模块的东西,给你用就不错了,但是允许对变量的成员操作(其实就是Java的final变量),但是最好不要这样做,因为这种改变会影响到其它的也用了profile.js模块的地方会导致查错很麻烦
,可以本地额外的复制一份导入的变量来修改,除非明确要同步修改所有模块对该变量的引用;
import的 from可以不带.js后缀,即可以from './profile',注意这个路径可以是绝对或相对路径;
from如果没有带路径,那么必须有地方配置了如from 'util',这里没有带路径,那么一定是存在地方配置了util的具体位置(比如package.json,webpack.config.js等);(from的值其实还可以是文件夹名,如node_modules里的)
import具有提升效果,即你写在最下面都会提升到第一行来import,因此最好import就写在上面,export写在最下面;
import './profile'似乎可以一次性导入模块中所有的export;(貌似不是,导入所有是用*,这个似乎是令profile这个模块执行,如它里面全局部分存在console.log(...)就会因为import './profile';而执行;
import 的文件可以是任意后缀,如.css、.vue等等;
import和export都是需要{}括起来的,哪怕只有一个变量名需要被import,但是如果用的是default,如export default foo;那么是不要{}的,即export default {foo};错误,同样的如果import {mm} from './profile'的profile是export default的那么也是错误的,
必须要import mm from './profile';而且注意,由于对方是export default,那么实际上mm可以是任意合法标识符;
一个模块只能有一个默认输出,因此export default在一个模块里只能出现一次;但是可以有非default的导出,import时可以这样:import Test, {mm,nn} from xx;
require是过时的写法;
多了class关键字;(这种的应该就不能有return语句了)