Node.js 使用
创建 Node 项目
npm init -y # 初始化 Node 项目
package.json 文件
这个文件记录了项目的相关信息。
{
"name": "hello-node",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "node src/index.cjs",
"serve": "node server/index.js",
"compile": "babel src/babel --out-dir compiled"
},
"author": "",
"license": "ISC",
"devDependencies": {
...
}
}
其中 scripts 项记录了我们可以对项目运行的命令。使用 npm run xxx 就可以运行对应的命令。
项目命名规则
| 类型 | 释义 | 例子 |
|---|---|---|
| 范围包 | 具备 @scope/project-name 格式,一般有一系列相关的开发依赖之间会以相同的 scope 进行命名。 |
如 @vue/cli、@vue/cli-service 就是一系列相关的范围包。 |
| 普通包 | 其他命名都属于普通包。 | 如 vue、vue-router。 |
模块化
CommonJS
- CommonJS 是在 ES Module 标准出现之前的事实标准。在老项目中非常常见。
- 遵循 CommonJS 标准的 JavaScript 文件可以使用
.cjs或者.js后缀。 - CommonJS 使用
module.exports导出模块,使用require('module/path')导入模块。
默认导出
module.cjs:
module.exports = 'Hello World' // 导出一个字符串
index.cjs:
const m = require('./module.cjs') // 导入的也是字符串
console.log(m) // 'Hello World'
命名导出
其实我觉得本质上还是默认导出
module.cjs:
// 定义一个函数
function foo() {
console.log('Hello World from foo.')
}
// 定义一个变量
const bar = 'Hello World from bar.'
// 导出函数和变量(作为一个 JS 对象)
module.exports = { foo, bar }
导入函数和变量:
index.cjs:
const m = require('./module.cjs')
m.foo() // 'Hello World from foo.'
console.log(m.bar) // 'Hello World from bar.'
或者利用 ES6 的对象解构来直接拿到变量:
const { foo, bar } = require('./module.cjs')
foo() // 'Hello World from foo.'
console.log(bar) // 'Hello World from bar.'
还可以在导入时重命名:
const { foo: foo2, bar } = require('./module.cjs') // 重命名 foo 为 foo2
// 不会造成变量冲突
const foo = 1
console.log(foo) // 1
// 用新的命名来调用模块里的方法
foo2() // 'Hello World from foo.'
ES Module
- ES(ECMAScript)是 JavaScript 标准的名字。
- ES Module(ESM)是在 ES6 中推出的。
- ESM 使用
export default(默认导出)和export(命名导出)两个语法导出模块,使用import ... from 'module/path'导入模块。
默认导出
module.mjs:
export default 'Hello World'
index.mjs:
import m from './module.mjs'
console.log(m) // 'Hello World'
命名导出
module.mjs
// 导出 foo
export function foo() {
console.log('Hello World from foo.')
}
// 导出 bar
export const bar = 'Hello World from bar.'
导入 foo 和 bar:
index.mjs
import { foo, bar } from './module.mjs'
foo() // 'Hello World from foo.'
console.log(bar) // 'Hello World from bar.'
也可以使用 as 语法将模块所有命名导出挂在指定的变量上:
import * as m from './module.mjs' // 将所有命名导出挂在 m 变量上
m.foo() // 'Hello World from foo.'
console.log(m.bar) // 'Hello World from bar.'
也可以导入时重命名:
import { foo as foo2, bar } from './module.mjs' // foo 重命名为 foo2
// 不会造成变量冲突
const foo = 1
console.log(foo)
// 用新的命名来调用模块里的方法
foo2()
使用 npm 包
npm install md5 -S # 安装包到本地,并列为生产依赖(默认)
npm install md5 -D # 安装包到本地,并列为开发依赖

浙公网安备 33010602011771号