开发实践

前端项目架构规范( Vue2C )

// 开发环境
   node -v  // v15.14.0
   npm -v  // 7.7.6
   webpack -v  // webpack-cli 4.2.0  webpack 5.11.0
   vue -V  // @vue/cli 4.5.15

# 搭建项目开发环境选择版本

  • 搭建 Node.js 运行环境( npm 是 node 的包管理工具,它在安装 Node.js 运行环境的时候就一起安装好了 )
  • 在项目中安装和配置 webpack
npm install webpack webpack-cli --sav-dev
  • 全局 Vue 脚手架工具
npm install @vue/cli -g

# 创建项目

  • 打开命令行工具,进入项目工作空间

  • 执行命令行:创建项目

  • 选择自定义创建

  • 默认:Choose Vue version、Babel、Linter / Formatter
  • 手动选择( 上下移动,空格键选择 ):Router / Vuex / CSS Pre-processors

  • 选择 vue 2.x 版本

  • 选择 history 模式的路由

  • 选择 Less 作为 CSS 预处理器

  • 选择标准( Standard )代码风格

  • 代码保存和代码提交时,均校验代码风格

  • 依赖插件或工具的配置文件,分文件保存

  • 是否记录上述操作:否

  • 等待安装

  • 安装完毕


# 调整项目目录结构

// 项目目录结构
IDEA-WEB-PROJECT
— node_modules
— public
  — favicon.ico
  — index.html
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—
—

  • 删除 README.md,没啥用
  • package.json 中,将 serve 改为 start,这样就可以使用 npm start 运行项目了( 根据习惯进行选择 )
  "scripts": {
    "serve": "vue-cli-service serve",
    ...
  }
    改为
  "scripts": {
    "start": "vue-cli-service serve",
    ...
  }
  • 在项目根目录下创建 vue.config.js 文件

  • 在 src 下创建 libs > setting > setting.js,作为项目配置文件


  • /public/favicon.ico

删除默认的 favicon.ico,替换为项目的 favicon.ico                // 如何制作 favicon.ico


  • /public/index.html
<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

替换为:

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= VUE_APP_TITLE %></title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but <%= VUE_APP_TITLE %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
  </body>
</html>

目的 1:通过全局环境变量,设置网站主标题

  • 在 /src/libs/setting/setting.js 中设置 VUE_APP_TITLE,即网站标题
// 配置文件
const Setting = {
    // 业务相关
    VUE_APP_TITLE: 'webpiece - 整合分析、记录点滴' // 网站标题
}

module.exports = Setting;
  • 在 /vue.config.js 中引入配置文件(/src/libs/setting/setting.js),并设置全局环境变量 VUE_APP_TITLE
const Setting = require('./src/libs/setting/setting.js') // 配置文件

// 全局环境变量
process.env.VUE_APP_TITLE = Setting.VUE_APP_TITLE // 网站标题

// 导出
module.exports = {

}
  • 这样,网站标题就可以在配置文件(/src/libs/setting/setting.js)中,设置、显示了

目的 2(可选):全局环境变量 + 路由实例的构造配置中的 meta:{title:页面标题} 来设置页面副标题

  • 在路由实例的构造配置中添加 meta:{title:页面标题},该页面标题作为副标题使用
const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home,
    meta: {
      title: 'Home页面'
    }
  },
  {
    path: '/about',
    name: 'About',
    component: () => import('../views/About.vue'),
    meta: {
      title: 'About页面'
    }
  }
]
  • 在路由前置导航中添加逻辑:在路由发生变化时,设置页面标题(主标题 + 副标题)
router.beforeEach((to, from, next) => {
  // 路由发生变化时,添加页面副标题
  if (to.meta.title) {
    document.title = to.meta.title + ' - ' + process.env.VUE_APP_TITLE
  }

  next()
})

如果不是特别习惯,可以关闭保存时的代码风格检查,在 vue.config.js 中设置

const Setting = require('./src/libs/setting/setting.js') // 配置文件

// 全局环境变量
process.env.VUE_APP_TITLE = Setting.VUE_APP_TITLE // 网站标题

// 导出
module.exports = {
    // 保存时,关闭lint
    lintOnSave: false,
}

设置全局环境变量 — 项目环境 NODE_ENV,后续会用到

  • 在 /src/libs/setting/setting.js 中,设置 NODE_ENV(项目环境:deveiopment / production)
// 配置文件
const Setting = {
    // 业务相关
    VUE_APP_TITLE: 'webpiece - 整合分析、记录点滴', // 网站标题
    NODE_ENV: 'development', // 项目环境 deveiopment / production
}

module.exports = Setting;
  • 在 /vue.config.js 中,将 NODE_ENV 设置为全局环境变量
const Setting = require('./src/libs/setting/setting.js') // 配置文件

// 全局环境变量
process.env.VUE_APP_TITLE = Setting.VUE_APP_TITLE // 网站标题
process.env.NODE_ENV = Setting.NODE_ENV // 项目环境

// 导出
module.exports = {
    // 保存时,关闭lint
    lintOnSave: false,
}

部署相关设置

  • 在 /src/libs/setting/setting.js 中,添加相关字段:
// 配置文件
const Setting = {
    // 业务相关
    VUE_APP_TITLE: 'webpiece - 整合分析、记录点滴', // 网站标题
    NODE_ENV: 'development', // 项目环境 deveiopment / production
    // 部署相关
    NODE_ENV: 'development', // 项目环境 deveiopment / production
    publicPath: '/', // 部署应用时的基本URL
    outputDir: 'dist', // 生成环境构建文件的目录名
    assetsDir: '', // 放置生成的静态资源(js、css、img、fonts)的目录(相对于outputDir)
}

module.exports = Setting;
  • 在 vue.config.js 中,配置 webpack 相关
const Setting = require('./src/libs/setting/setting.js') // 配置文件

// 全局环境变量
process.env.VUE_APP_TITLE = Setting.VUE_APP_TITLE // 网站标题
process.env.NODE_ENV = Setting.NODE_ENV // 项目环境

// 导出
module.exports = {
    // 保存时,关闭lint
    lintOnSave: false,
    // 部署相关
    // 部署应用时的基本URL
    publicPath: Setting.publicPath,
    // 生成环境构建文件的目录名
    outputDir: Setting.outputDir,
    // 放置生成的静态资源(js、css、img、fonts)的目录(相对于outputDir)
    assetsDir: Setting.assetsDir,
}