前端基础知识

120 阅读11分钟

1.Node.js 安装配置

Node.js 安装配置 本章节我们将向大家介绍在 ** Windows、Linux 和 macOS** 上安装 Node.js 的方法。

Node.js 安装包及源码下载地址为:nodejs.org/en/download

官方网站提供两个版本:

LTS(Long Term Support):长期支持版本,推荐用于生产环境 Current:当前最新版本,包含最新特性 建议选择 LTS 版本,因为它更稳定且有长期技术支持。 Node.js 历史版本下载地址:nodejs.org/dist/

1.1 Windows 上安装 Node.js

你可以采用以下两种方式来安装。

1.1.1 Windows安装包(.msi)

image-19.png

一路next,安装完成后,我们可以在命令行或 Windows Powershell 中执行以下命令来测试:

node -v
npm -v

1.1.2 Windows 二进制文件 (.exe)安装

点击 "Standalone Binary (.zip)" 选项下载二进制文件: image-18.png 安装步骤

步骤 1 : 双击下载的安装包 Node.exe ,将出现如下界面 : image-11.png 点击 Run(运行)按钮将出现命令行窗口:

安装完成后,我们可以在命令行或 Windows Powershell 中执行以下命令来测试:

node -v
npm -v

如果你获得以上输出结果,说明你已经成功安装了Node.js。

使用命令行安装 我们也可以在 PowerShell 执行以下命令来安装:

# 安装 fnm(快速 Node 管理器)
winget install Schniz.fnm

# 配置 fnm 环境,使其在每次目录变更时自动使用
fnm env --use-on-cd | Out-String | Invoke-Expression

# 下载并安装 Node.js 版本 22
fnm use --install-if-missing 22

# 验证环境中 Node.js 的版本是否正确,输出应为 `v22.11.0`
node -v # 应该输出 `v22.11.0`

# 验证环境中 npm 的版本是否正确,输出应为 `10.9.0`
npm -v # 应该输出 `10.9.0`

1.2 Linux 上安装 Node.js

1、使用官方提供的安装脚本

本例以 fnm 安装包管理器位说明(也可以使用 nvm等),命令如下:

# 安装 fnm(快速 Node 管理器)
curl -fsSL https://fnm.vercel.app/install | bash

# 激活 fnm
source ~/.bashrc

# 下载并安装 Node.js
fnm use --install-if-missing 22

# 验证环境中的 Node.js 版本是否正确
node -v # 应该输出 `v22.11.0`

# 验证环境中的 npm 版本是否正确
npm -v # 应该输出 `10.9.0`

2、直接使用已编译好的包 点击 "Prebuilt Binaries" 选项下载二进制文件:

image-20.png Node 官网已经把 linux 下载版本更改为已编译好的版本了,我们可以直接下载解压后使用:

# wget https://nodejs.org/dist/v22.11.0/node-v22.11.0-linux-arm64.tar.xz    // 下载
# tar xf  node-v22.11.0-linux-arm64.tar.xz       // 解压
# cd node-v22.11.0-linux-arm64/                  // 进入解压目录
# ./bin/node -v                                  // 执行node命令 查看版本

解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:

ln -s /usr/software/nodejs/bin/npm   /usr/local/bin/ 
ln -s /usr/software/nodejs/bin/node   /usr/local/bin/

3、源码安装 Node.js 以下部分我们将介绍在 Ubuntu Linux 下使用源码安装 Node.js 。 其他的 Linux 系统,如 Centos 等类似如下安装步骤。

在 Github 上获取 Node.js 源码:


$ sudo git clone https://github.com/nodejs/node.git
Cloning into 'node'...

修改目录权限:

$ sudo chmod -R 755 node

使用 ./configure 创建编译文件,并按照:

$ cd node
$ sudo ./configure
$ sudo make
$ sudo make install

查看 node 版本:

$ node --version
v0.10.25

1.3 Mac OS 上安装

1、使用官方提供的安装脚本 image-21.png 本例以 nvm 安装包管理器位说明(也可以使用 fnm 等),命令如下:

# Download and install Homebrew
curl -o- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash

# Download and install Node.js:
brew install node@20

# Verify the Node.js version:
node -v # Should print "v20.19.4".

# Verify npm version:
npm -v # Should print "10.8.2".

2、使用预编译等安装工具 image-23.png 下载的 .pkg 文件,双击 .pkg 文件以启动安装向导。

3、直接使用已编译好的包 image-24.png 下载后,解压下载包,进入压缩包的 bin 目录,就可以看到已经编译好的 node 和 npm 了,可以直接在命令使用。

1.4 nvm 安装

NVM 是 Node.js 版本管理器,它允许你安装多个版本的 Node.js 并在需要的时候切换版本。

!!! 如果你的电脑已经安装了 node,那么在安装 nvm 之前要先卸载掉,避免后面产生不必要的冲突

1.4.1 Mac 卸载 Node.js 和 nvm

  • Mac 卸载:

    # 删除全局 node_modules 目录
    sudo rm -rf /usr/local/lib/node_modules
    # 删除 node
    sudo rm /usr/local/bin/node 
    # 删除全局 node 模块注册的软链
    cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm
    
  • Mac 安装 nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash

或者

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
  • 安装完成后,在命令行窗口输入 nvm 回车,安装成功会出现满满一页的各种信息,如果只有 nvm: command not found,就说明没安装成功
  • 没安装成功的话,执行 echo $0 命令,看下当前的 shell 是 bash 还是 zsh 如果是 bash 安装失败基本是没有 .bash_profile 这个文件,可以使用 open .bash_profile 命令打开这个文件试下,打不开就说明没有,那么执行下面命令创建一个,再重新执行上面的安装命令即可
# 创建 .bash_profile 文件
touch ~/.bash_profile

如果是 zsh,那就打开 open .zshrc 文件,在里面添加一行 source ~/.bash_profile,如果打不开这个文件,就先创建一个,再添加,再重新执行上面的安装命令即可

# 创建 .zshrc 文件
touch ~/.zshrc
# 创建完成,再打开,在里面添加这个
source ~/.bash_profile

1.4.2 Window 卸载 Node.js 和 nvm

nvm 下载地址:github.com/coreybutler… image.png

1.4.3 nvm 常用命令

操作类型命令示例备注
安装Node版本nvm install 版本号nvm install 20安装指定版本(如20.x.x)
安装Node版本nvm install --ltsnvm install --lts安装最新长期支持版本
查看版本nvm lsnvm ls列出本地已安装版本
查看远程版本nvm ls-remotenvm ls-remote列出远程可用版本
切换版本nvm use 版本号nvm use 18.19.1切换到指定版本
切换到最新LTS版nvm use --ltsnvm use --lts切换到最新LTS版本
设置默认版本nvm alias default 版本号nvm alias default 20设置默认Node版本
卸载版本nvm uninstall 版本号nvm uninstall 16.20.2删除指定版本
当前版本nvm currentnvm current显示当前使用的Node版本
执行命令nvm exec 版本号 命令nvm exec 18 node app.js用指定版本执行Node.js
重新加载nvmnvm rebindnvm rebind修复nvm命令绑定(如升级后)

⚠️ 注意事项

  1. 安装前需卸载已有的Node.js
  2. Windows用户需使用nvm-windows
  3. 版本号支持别名:node(最新)/lts(最新LTS)
  4. 多用户环境需使用nvm use --silent避免提示

2.包和npm

2.1 包的介绍

  • 可以理解为是插件或模块,这种模块都是个人或公司开发的,被称为第三方模块。
  • 个人或公司开发完模块,然后发布到npm网站,我们可以下载并使用这些第三方模块。

2.2 包的分类

特性dependenciesdevDependencies全局包
安装位置node_modules/node_modules/系统路径(如/usr/local/bin)
是否打包✅ 是❌ 否❌ 否
安装命令npm install 包名npm install 包名 --save-devnpm install -g 包名
典型场景项目功能实现开发工具链系统级工具
版本控制严格版本控制开发环境可放宽版本无版本控制
是否需要提交Git✅ 是✅ 是(需版本锁定)❌ 否
用途示例express, axioseslint, jestnodemon, typescript

2.3 npm的介绍

通俗的讲,npm是一个下载、卸载、发布、… 包的工具 npm是nodejs内置的工具,node存在的话则无需下载

npm 版本查看命令:npm -v

操作npmyarnpnpm
初始化项目
(创建package.json文件)
npm init / npm init -yyarn init / yarn init -ypnpm init
安装生产依赖
(添加到dependencies)
npm i 包名yarn add 包名pnpm add 包名
安装指定版本依赖
(精确控制依赖版本)
npm i 包名@版本号yarn add 包名@版本号pnpm add 包名@版本号
安装开发依赖
(添加到devDependencies)
npm i 包名 -Dyarn add 包名 -Dpnpm add 包名 -D
安装所有依赖
(根据package.json安装)
npm iyarn install / yarnpnpm install / pnpm i
移除项目依赖
(从项目中删除包)
npm un 包名yarn remove 包名pnpm remove 包名
安装全局包
(系统级安装命令行工具)
npm i 包名 -gyarn global add 包名pnpm global add 包名
移除全局包
(卸载系统级工具)
npm un 包名 -gyarn global remove 包名pnpm global remove 包名

2.4 npm命令

2.4.1 初始化

npm init -y
# 或
npm init
# 然后一路回车

2.4.2 安装及卸载命令

安装命令

建议在安装第三方模块之前,先执行如下命令。
下面的命令只需要执行一次即可(不管以后重启vscode还是重启电脑,都不需要执行第二次)
此命令会将下载地址修改为国内下载,加快下载速度
npm config set registry https://registry.npmmirror.com

# 正常的下载安装 【默认安装最新版本】
npm install 模块名

# 简写install为i 【默认安装最新版本】
npm i 模块名

# 一次性安装多个模块 【默认安装最新版本】
npm i 模块名 模块名 模块名

# 指定版本安装
npm i 模块名@版本号

# 安装项目真正所需的包
npm i 包名 --save   【老版本的node才需要加 --save,加它的目的是把记录添加到 package.json】
npm i 包名 -S       【--save 简写为 -S】

# 安装开发阶段用的包【包只在开发阶段有用;项目做完,这个包就没用了】
npm i 包名 --save-dev  【--save-dev 表示这个包只在开发阶段使用】
npm i 包名 -D          【--save-dev 简写为 -D】

# 一次性安装全部的依赖包
npm i

卸载命令

npm uninstall 模块名
npm un 模块名
npm un 模块名 模块名 模块名

2.6 package.json文件

2.6.1 创建 package.json

在包管理器(npm、yarn、pnpm)初始化之后,会生成一个 package.json 文件

npm init -y
# 或
npm init

2.6.2 解读 package.json

{
  // 1. 基础配置
  "name": "my-project",          // 项目名称(必填,全小写+连字符)
  "version": "1.0.0",            // 项目版本号(遵循语义化版本规范)
  "description": "A demo project", // 项目描述(会发布到npm)
  "private": true,               // 设为true防止意外发布到npm
  "license": "MIT",              // 开源许可证类型(MIT/ISC/Apache-2.0等)

  // 2. 项目入口文件配置
  "main": "dist/index.js",       // 项目主入口文件(CommonJS模块)
  "module": "src/index.js",      // ES模块入口(现代打包工具优先使用)
  "types": "dist/index.d.ts",    // TypeScript类型声明文件路径
  "exports": {                   // 条件导出(Node 12+)
    ".": {
      "import": "./src/index.js", // ES模块导入时使用
      "require": "./dist/index.js" // CommonJS导入时使用
    }
  },

  // 3. 脚本命令(npm run <script>)
  "scripts": {
    "dev": "vite",               // 启动开发服务器
    "build": "vite build",       // 生产环境构建
    "preview": "vite preview",   // 预览生产构建
    "test": "jest",              // 运行测试
    "lint": "eslint .",          // 代码检查
    "prepare": "husky install"   // npm install时自动执行的钩子
  },

  // 4. 生产环境依赖(会被打包到最终产物中)
  "dependencies": {
    "react": "^18.2.0",          // 主依赖(^表示允许小版本升级)
    "react-dom": "~18.2.0",      // ~表示只允许补丁版本升级
    "lodash": "4.17.21"          // 固定版本(不自动升级)
  },

  // 5. 开发环境依赖(不会打包到最终产物)
  "devDependencies": {
    "vite": "^4.0.0",            // 构建工具
    "eslint": "^8.0.0",          // 代码检查
    "typescript": "5.0.0"        // 类型检查
  },

  // 6. 依赖版本管理配置
  "engines": {
    "node": ">=16.0.0",          // 指定Node.js版本要求
    "npm": ">=8.0.0"             // 指定npm版本要求
  },

  // 7. 浏览器兼容性配置
  "browserslist": [
    ">0.2%",                    // 全球使用率>0.2%的浏览器
    "not dead",                 // 排除已停止维护的浏览器
    "not ie 11"                 // 排除IE11
  ],

  // 8. 项目文件配置
  "files": [                    // 发布到npm时包含的文件
    "dist",
    "src",
    "README.md"
  ],

  // 9. 仓库信息
  "repository": {
    "type": "git",
    "url": "https://github.com/user/repo.git"
  },

  // 10. 关键词(npm搜索用)
  "keywords": [
    "javascript",
    "react"
  ],

  // 11. 作者信息
  "author": "Your Name <email@example.com>",
  "contributors": [
    "Contributor 1 <c1@example.com>"
  ],

  // 12. 自定义配置(工具专用)
  "eslintConfig": {
    "extends": "eslint:recommended"
  },
  "jest": {
    "testEnvironment": "jsdom"
  }
}

2.6.3 package.json中scripts

它允许开发者定义一系列可执行的命令脚本,用于项目的开发、构建、测试等流程

"scripts": {
  "dev": "vue-cli-service serve",       // 启动开发服务器
  "build": "vue-cli-service build",     // 生产环境构建
  "build:staging": "vue-cli-service build --mode staging", // 预发环境构建
  "lint": "vue-cli-service lint",       // ESLint 代码检查
  "analyze": "vue-cli-service build --report" // 分析包体积
}
  • 启动本地服务:npm run dev
  • 生产环境构建:npm run build
  • ESLint 代码检查:npm run lint

3.目录结构

下边以 vue2 的网关项目为例

根目录/
├── build/                     # 打包配置文件
├── dist/                      # 打包文件
├── mock/                      # mock假数据
├── node_modules/              # 提供给整个工作区的npm包
├── public/                    # 公共文件
│   ├── favicon.ico            # 网页ico
│   └── index.html             # 入口文件
├── src/                       # 工作区目录
│   ├── api/                   # API
│   ├── assets/                # 静态文件-图片
│   ├── components/            # 组件库
│   │   ├── BackToTop/         # 返回顶部组件
│   │   ├── Charts/            # ECharts组件
│   │   ├── el-drag-dialog/    # 表格偏移指令组件
│   │   ├── permission/        # 权限指令组件
│   │   ├── waves/             # 按钮样式特效组件
│   │   └── ReasonDialog/      # 描述dialog弹窗组件
│   ├── directive/             # 常用指令
│   │   ├── clipboard/         # copy指令
│   │   ├── el-drag-dialog/    # 拖拉弹窗指令
│   │   ├── permission/        # 权限指令
│   │   ├── waves/             # 按钮样式特效指令
│   │   └── throttle/          # 节流指令
│   ├── filters/               # 常用过滤器
│   ├── icons/                 # 图标文件
│   ├── layout/                # 布局组件
│   ├── router/                # 路由配置
│   ├── store/                 # Vuex状态管理
│   ├── styles/                # 样式文件
│   │   ├── btn.scss           # 按钮样式
│   │   ├── element-ui.scss    # 全局自定义element-ui样式
│   │   ├── index.scss         # 全局通用样式
│   │   ├── mixin.scss         # 全局mixin
│   │   ├── sidebar.scss       # sidebar样式
│   │   ├── transition.scss    # vue transition动画
│   │   └── variables.scss     # 全局变量
│   ├── utils/                 # 工具函数
│   │   ├── auth.js            # 权限-token相关操作
│   │   ├── clipboard.js       # copy插件
│   │   ├── get-page-title.js  # 获取页面标题
│   │   ├── index.js           # 时间处理方法
│   │   ├── validate.js        # 校验处理方法
│   │   ├── request.js         # 封装axios请求
│   │   └── permission.js      # 权限判断
│   ├── views/                 # 页面组件
│   │   ├── charts/            # Echarts图表页
│   │   ├── dashboard/         # 首页
│   │   ├── error-page/        # 错误页面(401/404)
│   │   ├── excel/             # excel导出demo
│   │   ├── redirect/          # 重定向页
│   │   ├── service/           # API告警页
│   │   └── workorder/         # 服务申请页
│   ├── App.vue                # 主应用组件
│   ├── main.js                # 应用入口文件
│   └── settings.js            # 全局配置文件
├── .editorconfig              # 代码编辑器配置
├── .env.development           # 开发环境配置
├── .env.production            # 生产环境配置
├── .env.staging               # 预发环境配置
├── .eslintignore              # eslint忽略配置
├── .gitignore                 # git忽略配置
├── vue.config.js              # Vue CLI配置
├── package.json               # 项目依赖配置
└── package-lock.json          # 依赖版本锁定文件

3.1 vue.config.js 配置说明

vue.config.js是Vue CLI的配置文件,用于对项目进行 various配置,如:打包路径、代理、别名、loader、plugin等。

// vue.config.js
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  // 基础配置
  // ==============================
  // 项目部署目录
  publicPath: process.env.NODE_ENV === 'production' 
    ? '/your-project-name/'  // 生产环境路径
    : '/',                    // 开发环境路径

  // 打包输出目录
  outputDir: 'dist', 

  // 放置静态资源的目录
  assetsDir: 'static', 

  // 是否在开发环境下启用 eslint
  lintOnSave: process.env.NODE_ENV !== 'production', 

  // 是否使用包含运行时编译器的 Vue 构建版本
  runtimeCompiler: false, 

  // 配置 webpack-dev-server 行为
  devServer: {
    host: '0.0.0.0',       // 允许外部访问
    port: 8080,            // 端口号
    open: true,            // 自动打开浏览器
    overlay: {             // 编译错误显示
      warnings: false,
      errors: true
    },
    // 代理配置(解决跨域)
    proxy: {
      '/api': {
        target: 'http://dev-api.example.com',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  },

  // webpack 配置扩展
  // ==============================
  configureWebpack: {
    // 别名配置
    resolve: {
      alias: {
        '@': path.resolve(__dirname, 'src'),
        'assets': path.resolve(__dirname, 'src/assets'),
        'components': path.resolve(__dirname, 'src/components')
      },
      // 扩展名自动解析
      extensions: ['.js', '.vue', '.json', '.scss']
    },

    // 模块规则
    module: {
      rules: [
        // 处理 SCSS 文件
        {
          test: /\.scss$/,
          use: [
            process.env.NODE_ENV !== 'production' 
              ? 'vue-style-loader' 
              : MiniCssExtractPlugin.loader,
            'css-loader',
            'sass-loader'
          ]
        },
        // 处理 SVG 图标
        {
          test: /\.svg$/,
          loader: 'svg-sprite-loader',
          options: {
            symbolId: 'icon-[name]'
          }
        }
      ]
    },

    // 插件配置
    plugins: [
      // Vue Loader 插件
      new VueLoaderPlugin(),

      // 定义环境变量
      new webpack.DefinePlugin({
        __VUE_OPTIONS_API__: true,
        __VUE_PROD_DEVTOOLS__: false
      }),

      // HTML 模板生成
      new HtmlWebpackPlugin({
        template: 'public/index.html',
        filename: 'index.html',
        inject: true
      })
    ]
  },

  // CSS 配置
  // ==============================
  css: {
    // 将 CSS 提取为独立文件(生产环境)
    extract: process.env.NODE_ENV === 'production',

    // 是否启用 CSS source map
    sourceMap: false,

    // CSS Modules 配置
    modules: {
      localIdentName: '[name]_[local]_[hash:base64:5]'
    }
  },

  // Babel 配置
  // ==============================
  transpileDependencies: [
    // 需要转译的第三方依赖
    'element-ui',
    'some-es6-library'
  ],

  // 插件配置
  // ==============================
  pluginOptions: {
    // Babel 多语言支持
    i18n: {
      locale: 'zh',
      fallbackLocale: 'en',
      localeDir: 'locales',
      enableLegacy: true,       // 启用 Vue 2 兼容模式
      runtimeOnly: false
    }
  }
};

3.2 .editorconfig配置

editorconfig配置是一个用于统一代码风格的配置文件,它可以帮助开发团队在不同编辑器和 IDE 中保持一致的编码风格

  • 跨编辑器统一风格:解决不同开发者使用不同编辑器(VSCode/Sublime/IntelliJ 等)导致的风格差异
  • 减少代码冲突:统一换行符、缩进等基础格式,降低 Git 合并冲突概率
  • 零依赖:无需安装插件即可被主流编辑器原生支持(部分编辑器需插件)

使用方法 1.创建文件

  • 在项目根目录新建 .editorconfig 文件

2.编辑器支持

  • VSCode:需安装 EditorConfig for VS Code 插件

  • IntelliJ:2017+ 版本已内置支持

  • 其他编辑器:参考 editorconfig.org 3.优先级规则

  • 就近原则:子目录的配置会覆盖父目录配置

  • 文件类型匹配:[.vue] 的规则会覆盖 [] 的通用规则

典型配置示例

# https://editorconfig.org
# 顶层配置文件声明
root = true

# 通用规则(适用于所有文件)
[*]
charset = utf-8                  # 文件编码
end_of_line = lf                 # 换行符类型(lf/unix | crlf/windows)
indent_style = space             # 缩进方式(space/tab)
indent_size = 2                  # 缩进空格数
trim_trailing_whitespace = true  # 自动删除行尾空格
insert_final_newline = true      # 文件末尾自动加空行

# 针对特定文件类型的规则
[*.{js,vue,ts}]
indent_size = 2                  # JS/Vue/TS 文件用2空格缩进

[*.html]
indent_size = 4                  # HTML 文件用4空格缩进

[*.md]
trim_trailing_whitespace = false # Markdown 文件保留行尾空格(某些MD语法需要)

3.3 .eslintrc.js配置

eslintrc.js是 ESLint 的配置文件,用于定义 JavaScript/TypeScript 代码的质量检查规则

  • 代码规范检查:自动检测代码中的潜在错误和风格问题
  • 团队统一风格:强制团队使用统一的编码规范
  • 自动修复:部分规则可自动修复(如缩进/引号)
  • 集成支持:与 VSCode、WebStorm 等编辑器深度集成

基础配置示例

// .eslintrc.js
/**
 * ESLint 配置文件
 * 该配置用于 Vue.js 项目的代码规范检查
 * 基于 eslint:recommended 和 plugin:vue/recommended 规则集扩展
 */
module.exports = {
  // 指定 ESLint 的根目录(配置文件所在目录)
  root: true,

  // 解析器配置
  parserOptions: {
    // 使用 babel-eslint 解析器
    parser: 'babel-eslint',
    // 使用 ECMAScript 模块
    sourceType: 'module'
  },

  // 指定代码运行环境
  env: {
    browser: true,  // 浏览器全局变量
    node: true,     // Node.js 全局变量
    es6: true       // 启用 ES6 语法支持
  },

  // 扩展的规则集
  extends: [
    'plugin:vue/recommended',  // Vue.js 官方推荐规则
    'eslint:recommended'       // ESLint 推荐规则
  ],

  // 自定义规则配置
  rules: {
    /* Vue.js 相关规则 */
    // 每行最多属性数量限制
    "vue/max-attributes-per-line": [2, {
      "singleline": 10,        // 单行元素最多10个属性
      "multiline": {           // 多行元素
        "max": 1,              // 每行最多1个属性
        "allowFirstLine": false // 不允许属性与标签名同行
      }
    }],
    // 关闭单行HTML元素内容换行检查
    "vue/singleline-html-element-content-newline": "off",
    // 关闭多行HTML元素内容换行检查
    "vue/multiline-html-element-content-newline":"off",
    // 组件名称必须使用PascalCase命名
    "vue/name-property-casing": ["error", "PascalCase"],
    // 允许使用v-html指令
    "vue/no-v-html": "off",

    /* JavaScript 基本规则 */
    // 强制 getter/setter 成对出现
    'accessor-pairs': 2,
    // 箭头函数箭头前后必须有空格
    'arrow-spacing': [2, { 'before': true, 'after': true }],
    // 代码块花括号内必须有空格
    'block-spacing': [2, 'always'],
    // 强制使用一致的括号风格
    'brace-style': [2, '1tbs', { 'allowSingleLine': true }],
    // 不强制驼峰命名
    'camelcase': [0, { 'properties': 'always' }],
    // 禁止使用拖尾逗号
    'comma-dangle': [2, 'never'],
    // 逗号后必须有空格,前不能有空格
    'comma-spacing': [2, { 'before': false, 'after': true }],
    // 逗号必须放在行尾
    'comma-style': [2, 'last'],
    // 派生类构造函数必须调用super()
    'constructor-super': 2,
    // 强制多行代码使用花括号
    'curly': [2, 'multi-line'],
    // 点操作符必须与属性在同一行
    'dot-location': [2, 'property'],
    // 文件末尾必须有空行
    'eol-last': 2,
    // 必须使用 === 和 !==
    'eqeqeq': ["error", "always", {"null": "ignore"}],
    // generator 函数星号前后必须有空格
    'generator-star-spacing': [2, { 'before': true, 'after': true }],
    // 回调函数必须处理错误
    'handle-callback-err': [2, '^(err|error)$'],
    // 使用2个空格缩进
    'indent': [2, 2, { 'SwitchCase': 1 }],
    // JSX属性必须使用单引号
    'jsx-quotes': [2, 'prefer-single'],
    // 对象字面量键值对冒号后必须有空格,前不能有空格
    'key-spacing': [2, { 'beforeColon': false, 'afterColon': true }],
    // 关键字前后必须有空格
    'keyword-spacing': [2, { 'before': true, 'after': true }],
    // 构造函数名必须大写字母开头
    'new-cap': [2, { 'newIsCap': true, 'capIsNew': false }],
    // new操作符后必须有括号
    'new-parens': 2,
    // 禁止使用Array构造函数
    'no-array-constructor': 2,
    // 禁止使用arguments.caller或arguments.callee
    'no-caller': 2,
    // 允许使用console
    'no-console': 'off',
    // 禁止修改类声明的变量
    'no-class-assign': 2,
    // 禁止在条件语句中使用赋值语句
    'no-cond-assign': 2,
    // 禁止修改const声明的变量
    'no-const-assign': 2,
    // 允许在正则表达式中使用控制字符
    'no-control-regex': 0,
    // 禁止删除变量
    'no-delete-var': 2,
    // 禁止函数参数重复
    'no-dupe-args': 2,
    // 禁止类成员重复
    'no-dupe-class-members': 2,
    // 禁止对象字面量键重复
    'no-dupe-keys': 2,
    // 禁止case语句重复
    'no-duplicate-case': 2,
    // 禁止正则表达式使用空字符集
    'no-empty-character-class': 2,
    // 禁止使用空解构模式
    'no-empty-pattern': 2,
    // 禁止使用eval
    'no-eval': 2,
    // 禁止对catch子句的参数重新赋值
    'no-ex-assign': 2,
    // 禁止扩展原生对象
    'no-extend-native': 2,
    // 禁止不必要的函数绑定
    'no-extra-bind': 2,
    // 禁止不必要的布尔转换
    'no-extra-boolean-cast': 2,
    // 禁止不必要的括号(仅针对函数)
    'no-extra-parens': [2, 'functions'],
    // 禁止case语句贯穿
    'no-fallthrough': 2,
    // 禁止浮点小数
    'no-floating-decimal': 2,
    // 禁止函数重载
    'no-func-assign': 2,
    // 禁止隐式eval
    'no-implied-eval': 2,
    // 禁止在嵌套块中声明函数
    'no-inner-declarations': [2, 'functions'],
    // 禁止无效的正则表达式
    'no-invalid-regexp': 2,
    // 禁止不规则的空白
    'no-irregular-whitespace': 2,
    // 禁止使用__iterator__属性
    'no-iterator': 2,
    // 禁止标签与变量同名
    'no-label-var': 2,
    // 禁止使用标签语句
    'no-labels': [2, { 'allowLoop': false, 'allowSwitch': false }],
    // 禁止不必要的嵌套块
    'no-lone-blocks': 2,
    // 禁止混用空格和制表符
    'no-mixed-spaces-and-tabs': 2,
    // 禁止使用多个空格
    'no-multi-spaces': 2,
    // 禁止多行字符串
    'no-multi-str': 2,
    // 禁止多行空行(最多1行)
    'no-multiple-empty-lines': [2, { 'max': 1 }],
    // 禁止修改原生对象
    'no-native-reassign': 2,
    // 禁止在in操作符左边使用否定
    'no-negated-in-lhs': 2,
    // 禁止使用Object构造函数
    'no-new-object': 2,
    // 禁止使用require创建新实例
    'no-new-require': 2,
    // 禁止使用Symbol构造函数
    'no-new-symbol': 2,
    // 禁止使用原始包装器
    'no-new-wrappers': 2,
    // 禁止将全局对象作为函数调用
    'no-obj-calls': 2,
    // 禁止使用八进制字面量
    'no-octal': 2,
    // 禁止使用八进制转义序列
    'no-octal-escape': 2,
    // 禁止使用__dirname和__filename进行路径拼接
    'no-path-concat': 2,
    // 禁止使用__proto__属性
    'no-proto': 2,
    // 禁止重复声明变量
    'no-redeclare': 2,
    // 禁止正则表达式字面量中出现多个空格
    'no-regex-spaces': 2,
    // 禁止在return语句中使用赋值语句(除非用括号括起来)
    'no-return-assign': [2, 'except-parens'],
    // 禁止自我赋值
    'no-self-assign': 2,
    // 禁止自我比较
    'no-self-compare': 2,
    // 禁止使用逗号操作符
    'no-sequences': 2,
    // 禁止使用保留字作为变量名
    'no-shadow-restricted-names': 2,
    // 禁止函数名和括号之间有空格
    'no-spaced-func': 2,
    // 禁止稀疏数组
    'no-sparse-arrays': 2,
    // 在调用super()之前禁止使用this
    'no-this-before-super': 2,
    // 禁止抛出字面量
    'no-throw-literal': 2,
    // 禁止行尾空格
    'no-trailing-spaces': 2,
    // 禁止未声明的变量
    'no-undef': 2,
    // 禁止将变量初始化为undefined
    'no-undef-init': 2,
    // 禁止意外的多行表达式
    'no-unexpected-multiline': 2,
    // 禁止循环条件不变
    'no-unmodified-loop-condition': 2,
    // 禁止不必要的三元表达式
    'no-unneeded-ternary': [2, { 'defaultAssignment': false }],
    // 禁止不可达代码
    'no-unreachable': 2,
    // 禁止在finally块中使用return/throw/break/continue
    'no-unsafe-finally': 2,
    // 禁止未使用的变量(参数除外)
    'no-unused-vars': [2, { 'vars': 'all', 'args': 'none' }],
    // 禁止不必要的.call()和.apply()
    'no-useless-call': 2,
    // 禁止不必要的计算属性
    'no-useless-computed-key': 2,
    // 禁止不必要的构造函数
    'no-useless-constructor': 2,
    // 允许不必要的转义字符
    'no-useless-escape': 0,
    // 禁止属性前有空格
    'no-whitespace-before-property': 2,
    // 禁止使用with语句
    'no-with': 2,
    // 强制变量声明方式(初始化过的变量必须单独声明)
    'one-var': [2, { 'initialized': 'never' }],
    // 操作符换行规则
    'operator-linebreak': [2, 'after', { 'overrides': { '?': 'before', ':': 'before' } }],
    // 禁止块内填充
    'padded-blocks': [2, 'never'],
    // 强制使用单引号(允许模板字符串和避免转义)
    'quotes': [2, 'single', { 'avoidEscape': true, 'allowTemplateLiterals': true }],
    // 禁止使用分号
    'semi': [2, 'never'],
    // 分号前后空格规则
    'semi-spacing': [2, { 'before': false, 'after': true }],
    // 块前必须有空格
    'space-before-blocks': [2, 'always'],
    // 函数名后不能有空格
    'space-before-function-paren': [2, 'never'],
    // 括号内不能有空格
    'space-in-parens': [2, 'never'],
    // 中缀操作符周围必须有空格
    'space-infix-ops': 2,
    // 一元操作符空格规则
    'space-unary-ops': [2, { 'words': true, 'nonwords': false }],
    // 注释必须有空格
    'spaced-comment': [2, 'always', { 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] }],
    // 模板字符串内不能有空格
    'template-curly-spacing': [2, 'never'],
    // 必须使用isNaN()检查NaN
    'use-isnan': 2,
    // typeof必须与有效字符串比较
    'valid-typeof': 2,
    // 立即执行函数表达式必须用括号包裹
    'wrap-iife': [2, 'any'],
    // yield*表达式星号前后必须有空格
    'yield-star-spacing': [2, 'both'],
    // 禁止Yoda条件
    'yoda': [2, 'never'],
    // 建议使用const声明不会被修改的变量
    'prefer-const': 2,
    // 生产环境禁止使用debugger
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
    // 对象字面量花括号内必须有空格
    'object-curly-spacing': [2, 'always', { objectsInObjects: false }],
    // 数组括号内不能有空格
    'array-bracket-spacing': [2, 'never']
  }
}

3.4 babel.config.js

babel.config.js 是 Babel 的核心配置文件,用于定义 JavaScript 代码的编译规则。以下是详细说明:

  • 语法转换:将 ES6+/TypeScript/JSX 等新特性转换为向后兼容的 ES5 代码
  • polyfill 注入:自动添加缺失的 API(如 Promise/Array.from)
  • 代码优化:删除冗余代码、压缩体积(需配合插件)
  • 插件化扩展:支持自定义转换逻辑(如 React JSX 转换)

基础配置示例

// babel.config.js
module.exports = {
  // 1. 基础配置
  presets: [
    ['@babel/preset-env', {
      targets: { // 目标环境
        chrome: '60',
        firefox: '60',
        ie: '11'
      },
      useBuiltIns: 'usage', // 按需添加 polyfill
      corejs: 3, // 使用 corejs@3 作为 polyfill
      modules: 'commonjs' // 将 ES Modules 转换为 CommonJS
    }],
    '@babel/preset-react' // 支持 React JSX
  ],

  // 2. 插件配置
  plugins: [
    '@babel/plugin-transform-runtime', // 避免重复代码
    '@babel/plugin-proposal-class-properties' // 支持类属性
  ],

  // 3. 文件过滤
  ignore: [
    'node_modules/**',
    'dist/**'
  ]
};
配置项说明常用值
presets预设规则集@babel/preset-env/@babel/preset-react
plugins自定义插件@babel/plugin-transform-arrow-functions
targets目标环境{ chrome: '60' }/{ esmodules: true }
useBuiltInspolyfill方式 'usage'(按需)/'entry'(手动引入)
corejspolyfill实现 2(旧版)/3(推荐)
modules模块化标准'commonjs'/'umd'/'systemjs'
ignore/only文件过滤['node_modules/**']

.eslintignore 忽略文件

build/*.js
src/assets
public
dist

3.5 .env

.env 文件用于在 Vue 项目中定义环境变量,这些变量可以通过 process.env 在代码中访问,常用于配置不同环境下的参数(如 API 地址、端口等)

  • 存储环境变量:将配置参数(如 API 地址、端口、密钥等)集中管理,避免硬编码。
  • 区分环境:通过不同环境文件(如 .env.development、.env.production)动态加载对应变量。
  • 安全性:敏感信息(如密钥)可通过 .env.local 文件存储,避免提交到 Git。

使用方法

项目根目录创建 .env 文件(与 vue.config.js 同级)

版本前缀要求示例
Vue2必须以 VUE_APP_ 开头VUE_APP_API_URL=http://api.example.com
Vue3若使用 Vite 构建工具,需以 VITE_ 开头VITE_API_URL=http://api.example.com

原因:Vue2 基于 Webpack,通过 process.env 读取变量,且 Webpack 默认只暴露 VUE_APP_ 开头的变量;Vue3 若使用 Vite,则通过 import.meta.env 读取,且默认识别 VITE_ 前缀。

访问方式

版本读取方式示例
Vue2process.env.VUE_APP_变量名需通过 process.env 对象访问const api = process.env.VUE_APP_BASE_API
Vue3import.meta.env.VITE_变量名Vite 提供的 import.meta.env 对象直接读取 const api = import.meta.env.VITE_BASE_API;

假设项目结构如下:

.env                # 全局默认
.env.local          # 全局本地(敏感信息)
.env.development    # 开发环境
.env.production     # 生产环境

运行 npm run serve 时,加载顺序为:

.env
.env.local(覆盖 .env)
.env.development(覆盖前两者)

运行时加载

  • 开发环境:npm run serve 会自动加载 .env.development
  • 生产环境:npm run build 会加载 .env.production
  • 测试环境:npm run test 会加载 .env.test

不同 .env 文件的区别

文件名用途加载时机优先级
.env全局默认配置所有环境最低
.env.local全局本地覆盖(敏感信息)所有环境,覆盖 .env较高
.env.development开发环境配置npm run serve中等
.env.development.local开发环境本地覆盖npm run serve,覆盖 .env.development最高
.env.production生产环境配置npm run build中等
.env.production.local生产环境本地覆盖npm run build,覆盖 .env.production最高
.env.test测试环境配置npm run test中等
.env.test.local测试环境本地覆盖npm run test,覆盖 .env.test最高

VSCode插件🔥

  • Chinese (Simplified) (简体中文)

将VS Code界面转换为简体中文版本 marketplace.visualstudio.com/items?itemN…

  • EditorConfig for vs code

用于管理.editorconfig文件 marketplace.visualstudio.com/items?itemN…

  • Vetur

提供Vue语法高亮、代码片段、Emmet和错误检查等功能 marketplace.visualstudio.com/items?itemN…

  • Vue VSCode Snippets

快速生成Vue组件模板和常用代码片段 marketplace.visualstudio.com/items?itemN…

  • Bookmarks

在代码中创建书签标记,实现快速导航和位置标记 marketplace.visualstudio.com/items?itemN…

  • Vue 3 Snippets

提供Vue 3语法自动补全和代码片段生成 marketplace.visualstudio.com/items?itemN…

  • Auto Close Tag

自动闭合HTML/XML标签,提高标签编写效率 marketplace.visualstudio.com/items?itemN…

  • Auto Rename Tag

修改HTML/XML开始标签时自动同步更新结束标签 marketplace.visualstudio.com/items?itemN…

  • HTML CSS Support

在HTML文件中智能提示CSS类名和ID选择器 marketplace.visualstudio.com/items?itemN…

  • Material Icon Theme

提供Material Design风格的文件图标主题 marketplace.visualstudio.com/items?itemN…

  • Element UI Snippets

提供Element UI组件库的代码补全和片段生成 marketplace.visualstudio.com/items?itemN…

  • Path Intellisense

文件路径自动补全和智能提示 marketplace.visualstudio.com/items?itemN…

  • Live Server

启动本地开发服务器并实时刷新页面预览效果 marketplace.visualstudio.com/items?itemN…

  • vscode-icons

为不同文件类型提供分类图标标识 marketplace.visualstudio.com/items?itemN…

  • Vue Language Features (Volar)

Vue 3专用语言支持插件,提供TypeScript级性能 marketplace.visualstudio.com/items?itemN…

  • ESLint插件

在编辑器中集成ESLint,实时检查JavaScript代码质量和规范 marketplace.visualstudio.com/items?itemN…

  • 代码格式化插件

使用Prettier+Standard规范自动格式化代码风格 marketplace.visualstudio.com/items?itemN…

常用谷歌浏览器扩展程序

  • FeHelper(前端助手)

    JSON自动格式化、手动格式化,支持排序、解码、下载等,更多功能可在配置页按需安装!

  • React Developer Tools

    React调试工具

  • Redux DevTools

    用于调试应用程序的状态变化

  • Vue.js devtools

    Vue调试工具