Nodejs中es6 模块和 node 模块不兼容指的是?

Nodejs中es6 模块和 node 模块不兼容指的是?
在学习 es6 的模块加载中,看到说 node 的模块和 es6 的模块是不兼容的?但是我在 nodejs 创建的 vue 应用里面使用 es6 的模块加载却没有问题。。。那么 node 和 es6 的不兼容指的是什么呢

10 回复

nodejs 以前是使用的 commonjs 作为自己的模块儿机制,es6 提出了 import 的方法,这两者不兼容。vue 使用 es6 模块是因为它用了 webpack 打包,或者说你的目标浏览器目前已经支持了 es6 语法


是不是在使用了 import 或者 export 的文件里面就不能再使用 require 和 module.export 呢

模块机制不兼容

并不是,在 node 里面,目前已经支持了 import 语法,但是为了向后兼容,依然支持 require,可以一起使用。

export default 暴露的东西 require 时候要加.default

用了 webpack 了吧,webpack 会把 import 语句( es6 )转化成 require 语句( commonjs )

「不兼容」就是「不兹瓷」。如果你非要问我为啥不兹瓷,我的回答是无可奉告

原来如此

在Node.js中,ES6模块和Node模块不兼容的问题主要源于它们遵循不同的模块化规范。

ES6模块是在ECMAScript 2015中引入的,它使用importexport语句来实现模块化。例如:

// ES6模块导出
export const myVar = 'Hello World';

// ES6模块导入
import { myVar } from './myModule.js';
console.log(myVar); // 输出 "Hello World"

而Node模块则遵循CommonJS规范,使用requiremodule.exports来实现模块化。例如:

// Node模块导出
module.exports = function() {
  console.log('Hello World');
};

// Node模块导入
const myFunc = require('./myModule.js');
myFunc(); // 输出 "Hello World"

这种不兼容主要体现在语法和加载机制上。Node.js从6.0版本开始支持大部分ES6特性,但要在Node.js中使用ES6模块,通常需要在package.json中设置"type": "module",或者使用.mjs扩展名。这样,Node.js就会将文件作为ES6模块来处理。

总的来说,Node.js通过一定的配置可以支持ES6模块,但在实际项目中,开发者需要根据项目需求选择合适的模块化方式,并确保所有模块之间的兼容性。

回到顶部