代码
我们先看这样一段代码
node环境下
math.js
function sum(...args) {
return args.reduce((pre, value, index) => pre + value,0)
}
export default sum
index.js
import sum from './math.js'
console.log(sum(1, 2, 3));
然后我们运行node index.js
很明显会报错
(node:2832) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
给的提示是 想要去加载ES module 请在package.json中设置xxx或者使用.mjs文件后缀
解决
1. 仍然使用ES module模块编写
按照它的提示 我们可以把涉及到的文件改成.mjs后缀 运行node index.mjs或者 index.js的同级目录结构下 添加package.json文件 内容为{"type": "module"} 来告诉node我们这些代码用ES module解析 运行node index.js
2. 编写Commonjs模块代码
法一:改写如下
index.js
const math = require('./math.js')
console.log(math.sum(1,2,3))
math.js
function sum(...args) {
return args.reduce((pre, value) => pre + value,0)
}
module.exports = {
sum
}
这里我是这样理解的 用math代表模块(math.js文件) math.js文件暴露出来了sum 所以我们用math.sum拿到sum函数
运行node index.js 发现成功 这里也可以添加package.json文件 内容为{"type": "commonjs"} 当然也可以不加 因为node环境下默认使用commonjs模块解析js代码
2.2 我们还可以把涉及到的文件改成.cjs后缀 然后运行node index.cjs
回顾及补充
这里对js的两种模块的相关知识进行一下回顾以及补充 js有两种 一种是 ES6 模块,简称 ESM;另一种是 Node.js 专用的 CommonJS 模块.... 待写