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 就是一系列相关的范围包。
普通包 其他命名都属于普通包。 vuevue-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 # 安装包到本地,并列为开发依赖
posted @ 2024-06-01 13:14  Undefined443  阅读(28)  评论(0)    收藏  举报