在es5中,用 module.exports 和 exports 导出模块,用 require 导入模块。
在es6中,新增 export default 和 export 导出模块,用 import 导入模块。
一般的,module.exports 和 exports 与 require 对应。export default 和 export 与 import 对应。
也就是说,用 module.exports 和 exports 导出的模块,用 require 导入;用 export default 和 export 导出的模块,用 import 导入。
当然,这也不是绝对的。如果开发环境支持es6语法,用es5的 module.exports 和 exports 导出的模块,可以使用es6的 import 导入;用es6的 export default 和 export 导出的模块,可以使用 es5 的 require 导入。
注意:Node.js中未实现对es6中 export default 和 export 这两个关键字的支持。
原因:Node.js是CommonJS规范的实现,CommonJS规范使用require引入模块,使用module.exports导出模块,
而 import 和 export (包括 export default 和 export)是es6的新特性,CommonJS模块规范和ES6模块规范完全是两种不同的概念。
本机node版本为 v10.6.0
我们可以来测试一下, import 在Node.js环境中的运行情况,新建index.js文件,输入如下代码,运行node index.js命令:
import fs from 'fs'
console.log(fs)
报错如下:语法错误:意外的标识符
(function (exports, require, module, __filename, __dirname) { import fs from 'fs'
^^
SyntaxError: Unexpected identifier
同理:测试 export 在Node.js环境中的运行情况:
export const a = 'ceshi'
console.log(a)
报错如下:语法错误:意外的关键字export
(function (exports, require, module, __filename, __dirname) { export const a = 'ceshi'
^^^^^^
SyntaxError: Unexpected token export
那么,如何让 export 和 import 这两个es6新特性能在Node.js环境中使用呢?
噔噔噔噔~~~ 可以使用Babel代码编译库来解决哈!
初始化 package.json 配置文件
npm init
安装 Babel 插件
npm i babel-cli babel-preset-env -D
新建 .babelrc 配置文件,建在项目根目录哈
{
"presets": [
[
"env",
{
"targets": {
"node": "current"
}
}
]
]
}
配置启动命令,在 package.json 配置文件中添加dev命令
"scripts": {
"dev": "babel-node index"
}
执行命令,这样就不会报错啦!
npm run dev
注意:若想在命令行直接运行命令 babel-node index 会报错的,这种情况下需将babel-cli插件安装到全局,才能使用babel-node命令。
npm install babel-cli -g
扩展:nodemon监测项目文件变化
nodemon会监测项目中所有的文件,一旦发现文件有改动,nodemon会自动重启应用。
安装 nodemon 插件
npm i nodemon -D
修改dev命令
"scripts": {
"dev": "nodemon -w index.js --exec \"babel-node index.js --presets env\""
}
使用 nodemon 监控 index.js文件 的变化,发生变化时来执行 babel-node命令 编译 index.js文件。
与君共勉:再牛逼的梦想,也抵不住傻逼般的坚持!