Node.js 学习笔记
# Node.js 学习笔记
# 处理ES6模块
require()是同步加载,后面的代码必须等待这个命令执行完,才会执行。import命令则是异步加载,或者更准确地说,ES6 模块有一个独立的静态解析阶段,依赖关系的分析是在那个阶段完成的,最底层的模块第一个执行。- 只要脚本文件里面使用
import或者export命令,那么就必须采用.mjs后缀名。Node.js遇到.mjs文件,就认为它是ES6模块,默认启用严格模式。 - 如果不希望将后缀名改成
.mjs,可以在项目的package.json文件中,指定type字段为module。 .mjs文件总是以ES6模块加载,.cjs文件总是以CommonJS模块加载,.js文件的加载取决于package.json里面type字段的设置。
# 注意
Node.js版本13.2.0正式支持ES Modules特性,之前的版本要使用该特性的话,需要增加--experimental-modules作为启动参数。比如node --experimental-modules es6.mjsimport的时候,如果是本地的js文件,请带上.js这个后缀。否则会提示:Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/localPath/xxx'- 在
cjs中导入ejs模块,只能使用异步方式。
(async () => {
const { add } = await import('./tool.mjs');
console.log(add);
})();
require命令不能加载.mjs文件,因此ES6模块和CJS模块尽量不要混用。
# 路径
process.cwd(), 执行命令的目录。比如:project/bin/index.js- 在
project下,执行node bin/index.js,process.cwd()的值为project - 在
project/bin下,执行node ndex.js,process.cwd()的值为project/bin
- 在