[Q&A] require( CommonJS模块 ) 和 import (ES模块) 的区别

161 阅读2分钟

一.目录

  1. require( CommonJS模块 ) 和 import (ES模块) 的区别?
  2. Restful API 的 :id 是什么意思?
  3. 项目文件夹下打开终端,输入npm run dev ,同时启动前后端。

二. Q&A

1. require( CommonJS模块 ) 和 import (ES模块) 的区别?

graph TD
Node --> Module 
require/expotrsimport/export
后端部分( Node.js )用require语法前端部分( 浏览器执行 )用import 语法
使用module.exportsexports导出模块使用exportexport default导出模块
运行时动态加载, CommonJS 加载的是一个对象(即 module.exports 属性),该对象只有在脚本运行完才会生成静态编译, ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成。
👆因此,必须先引入再使用👆 因此, import 语句可以随意写在被调用语句前后
CommonJS 模块输出的是一个值的拷贝。模块内部值的改变不影响外部文件ES6 模块输出的是值的引用。模块内部值的改变影响外部文件
用法:image.pngexportsmodule.exports 的引用,没有本质区别。
※注意导出有=
image.png 1.引入 export default 导出的模块不用加 { },引入非 export default 导出的模块需要加 {}
2. 一个文件只能导出一个 default 模块。
※注意导出无=
import/export 不能对引入模块重新赋值/定义

相关链接:
require和import的区别 - 知乎 (zhihu.com)
阮一峰 - Module 的加载实现

2.Restful API 的 :id 是什么意思?

graph TD
Node.js --> Express.js
Express.js --> Router设计

一句话概括:将会把:后的名字(key)和实际调用时传入的${}内的数据(value)变成req.params的一个键值对。

code1.png调用部分,${ row._id }将成为键值对的 value

code.pngAPI设计,冒号后面的 id 将作为键值对的 key

详见Express.js 官方文档 Route parameters 部分

三.项目文件夹下打开终端,输入npm run dev ,同时启动前后端。

要先安装concurrently这个 npm 包。

image.png