Vue.js+vue-element搭建屬於自己的后台管理模板:創建一個項目(四)


Vue.js+vue-element搭建屬於自己的后台管理模板:創建一個項目(四)

前言

本章主要講解通過Vue CLI 腳手架構建工具創建一個項目,在學習Vue CLI之前我們需要先了解下webpack 代碼編譯工具,webpack 是一個現代 JavaScript 應用程序的靜態模塊打包器(module bundler)。

webpack

官方中文文檔地址:

https://www.webpackjs.com/concepts/

Vue CLI 腳手架構建工具

Vue CLI 是一個基於 Vue.js 進行快速開發的完整系統,搭建交互式的項目腳手架,Vue CLI版本3.x開始包名稱由vue-cli 改成了 @vue/cli, 如果你已經全局安裝了舊版本的 vue-cli (1.x 或 2.x),你需要先通過 npm uninstall vue-cli -g 卸載后再安裝3.x版本,Vue CLI 需要 Node.js 8.9 或更高版本 (推薦 8.11.0+)。

安裝Vue CLI

在命令行輸入:cnpm install -g @vue/cli  (安裝新包)

 

我們這里推薦用vue-cli 3.x構建項目,新版優化了編譯速度,不過你也可以通過老版本創建項目,老版本安裝命令:cnpm install --global vue-cli

備注:安裝后,檢查是否安裝成功 。vue -V (在此注意V為大寫,也可以用vue --version)

創建一個項目

運行以下命令來創建一個新項目:

vue create hello-world

項目構建完成后,會在當前目錄下創建hello-world項目文件夾。

 $ cd hello-world
 $ npm run serve

 

第一項為默認創建項目,默認的設置非常適合快速創建一個新項目的原型,這里我們選擇第二項手動創建項目,按回車繼續。

手動設置則提供了更多的選項,通過上下鍵選擇所需的包按空格鍵選中后,按回車繼續創建項目。

創建完成后我們進入hello-world目錄,輸入npm run serve運行項目(老版本運行命令為npm run dev)。

看到以上提示說明項目成功創建運行了,現在可以通過瀏覽器打開http://localhost:8080來訪問我們網站了。

打開項目

我們通過Visual Studio Code工具打開項目,文件 - 打開文件夾,選中我們創建的項目hello-world

目錄結構:

├── public                    # 靜態資源
│   │── favicon.ico        # favicon圖標
│   └── index.html        # html模板
├── src                         # 源代碼
│   ├── assets              # 主題 字體等靜態資源
│   ├── components     # 全局公用組件
│   ├── router               # 路由
│   ├── store                # 全局 store管理
│   ├── views               # views 所有頁面
│   ├── App.vue           # 入口頁面
│   └── main.js             # 入口文件 加載組件 初始化等
├──.browserslistrc        # 瀏覽器兼容性
├── .eslintrc.js              # eslint 配置項
├── babel.config.js       # babel 配置項
└── package.json         # package.json

 

package.json

每個項目的根目錄下面,一般都有一個package.json文件,定義了這個項目所需要的各種模塊,以及項目的配置信息。

{
  "name": "hello-world",  //npm包名稱
  "version": "0.1.0",   //npm包版本
  "description": "h-gx前端UI框架", //npm包描述
  "author": "h_gxi@foxmail.com",  //作者
  "license": "ISC", //開源許可說明
  "main": "main.js",
  "scripts": {       //腳本命令
    "serve": "vue-cli-service serve", //運行項目
    "build": "vue-cli-service build", //編譯打包
    "lint": "vue-cli-service lint"    //
  },
  "dependencies": { //生產環境 請不要將測試或過渡性的依賴放到dependencies中
    "core-js": "^3.3.2",
    "element-ui": "^2.12.0",
    "vue": "^2.6.10"
  },
  "devDependencies": {  //開發環境 
    "@vue/cli-plugin-babel": "^4.0.0",
    "@vue/cli-plugin-eslint": "^4.0.0",
    "@vue/cli-service": "^4.0.0",
    "babel-eslint": "^10.0.3",
    "eslint": "^5.16.0",
    "eslint-plugin-vue": "^5.0.0",
    "node-sass": "^4.13.0",
    "sass-loader": "^8.0.0",
    "uglifyjs-webpack-plugin": "^2.2.0",
    "vue-template-compiler": "^2.6.10"
  },
  "eslintConfig": {
    "root": true,
    "env": {
      "node": true
    },
    "extends": [
      "plugin:vue/essential",
      "eslint:recommended"
    ],
    "rules": {},
    "parserOptions": {
      "parser": "babel-eslint"
    }
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions"
  ]
}

 

vue.config.js

vue.config.js 是一個可選的配置文件,如果項目的 (和 package.json 同級的) 根目錄中存在這個文件,那么它會被 @vue/cli-service 自動加載。

const path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const isDev = process.env.NODE_ENV === 'development' // 開發環境

// 打包輸出路徑
const outputDir = 'dist'

module.exports = {
  outputDir: outputDir,
  // 部署應用包時的基本 URL
  publicPath: '/',
  // 端口
  devServer: {
    port: 6220 
  },
  // 默認情況下 babel-loader 會忽略所有 node_modules 中的文件。如果你想要通過 Babel 顯式轉譯一個依賴,可以在這個選項中列出來。
  transpileDependencies: ['element-ui'],
  // false生產環境下不打包map文件,true時可以看到所有源碼。
  productionSourceMap: false,
  // 如果這個值是一個對象,則會通過 webpack-merge 合並到最終的配置中。
  configureWebpack: {
    plugins: [
      /**
       * 復制nm-lib-skins/public目錄下的文件到輸出目錄
       */
      new CopyWebpackPlugin([
        {
          from: path.join(__dirname, 'public'),
          to: path.join(__dirname, outputDir),
          ignore: ['index.html']
        }
      ])
    ]
  },
  // 是一個函數,會接收一個基於 webpack-chain 的 ChainableConfig 實例。允許對內部的 webpack 配置進行更細粒度的修改。
  chainWebpack: config => {
    /**
     * 刪除懶加載模塊的 prefetch preload,降低帶寬壓力
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#prefetch
     * https://cli.vuejs.org/zh/guide/html-and-static-assets.html#preload
     * 而且預渲染時生成的 prefetch 標簽是 modern 版本的,低版本瀏覽器是不需要的
     */
    config.plugins.delete('prefetch').delete('preload')

    /**
     * 設置index.html模板路徑,默認public中的模板
     */
    config.plugin('html').tap(args => {
      args[0].template = './public/index.html'
      return args
    })

    config
      // 開發環境
      .when(
        isDev,
        // 轉換過的代碼(僅限行) https://webpack.docschina.org/configuration/devtool/
        config => config.devtool('cheap-source-map')
      )
      // 非開發環境
      .when(!isDev, config => {
        config.optimization.minimizer([
          new UglifyJsPlugin({
            uglifyOptions: {
              // 移除 console
              // 其它優化選項 https://segmentfault.com/a/1190000010874406
              warnings: false,
              compress: {
                drop_console: true,
                drop_debugger: true,
                pure_funcs: ['console.log']
              }
            }
          })
        ])

        // 拆分
        config.optimization.splitChunks({
          chunks: 'all',
          cacheGroups: {
            elementUI: {
              name: 'chunk-element-ui',
              priority: 20,
              test: /[\\/]node_modules[\\/]element-ui(.*)/
            }
          }
        })

        config.optimization.runtimeChunk({
          name: 'manifest'
        })
      })
  }
}

 

cnpm install uglifyjs-webpack-plugin --save-dev

cnpm install -D sass-loader node-sass

cnpm i element-ui -S

目錄導航

參考資料

Vue.js


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM