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.mjs
  • import的时候,如果是本地的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.jsprocess.cwd()的值为project
    • project/bin下,执行node ndex.jsprocess.cwd()的值为project/bin

# 参考