国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - Vue-CLI多頁分目錄打包的步驟記錄

Vue-CLI多頁分目錄打包的步驟記錄

2022-03-03 16:36鄭小輝 vue.js

這篇文章主要給大家介紹了關于Vue-CLI多頁分目錄打包的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

頁面目錄結構

Vue-CLI多頁分目錄打包的步驟記錄

注意需要將默認的 html 模板文件 public/index.html  移動到根目錄下。

安裝依賴

npm i --save-dev cross-env tasksfile

build/pages.js

獲取 Vue CLI 需要的多頁對象

const path = require("path")
const glob = require("glob")
const fs = require("fs")

const isProduction = process.env.NODE_ENV === "production"

// 自定義不同模塊的頁面 title
const titleMap = {
  index: "首頁"
}

function getPages (globPath) {
  const pages = {}
  glob.sync(globPath).forEach((item) => {
    const stats = fs.statSync(item)
    if (stats.isDirectory()) {
      const basename = path.basename(item, path.extname(item))

      // 如果模塊目錄下有 index.html 則使用該文件為 html 模板文件
      const template = fs.existsSync(`${item}/index.html`)
        ? `${item}/index.html`
        : path.join(__dirname, "../index.html")

      pages[basename] = {
        entry: `${item}/main.js`,
        title: titleMap[basename] || "默認頁面",
        template,
        // 這行代碼很重要
        // 兼容開發和生產時 html 頁面層級一致
        filename: isProduction ? "index.html" : `${basename}/index.html`
      }
    }
  })
  return pages
}

const pages = getPages(path.join(__dirname, "../src/pages/*"))

module.exports = pages

build/index.js

執行構建命令,循環執行 vue-cli-service build 。

const chalk = require("chalk")
const rimraf = require("rimraf")
const { sh } = require("tasksfile")

const PAGES = require("./pages")

// vue-cli-service --mode 值
const mode = process.env.MODE || "prod"

// 模塊名,可能為多個
const moduleNames = process.argv[2]

// 全部頁面列表
const pageList = Object.keys(PAGES)

// 有效模塊列表 未指定則為全部頁面列表
const validPageList = moduleNames ? moduleNames.split(",").filter((item) => pageList.includes(item)) : pageList
if (!validPageList.length) {
  console.log(chalk.red("**模塊名不正確**"))
  return
}

console.log(chalk.blue(`有效模塊:${validPageList.join(",")}`))

// 刪除 dist 目錄
rimraf.sync("dist")

console.time("總編譯時間")
const count = validPageList.length
let current = 0
// 逐個執行模塊編譯
for (let i = 0; i < validPageList.length; i += 1) {
  const moduleName = validPageList[i]
  process.env.MODULE_NAME = moduleName

  console.log(chalk.blue(`${moduleName} 模塊開始編譯`))

  // 通過 vue-cli-service build 編譯
  sh(`vue-cli-service build --mode ${mode}`, { async: true }).then(() => {
    console.log(chalk.blue(`${moduleName} 模塊編譯完成`))
    console.log()
    current += 1
    if (current === count) {
      console.log(chalk.blue("-----全部模塊編譯完成-----"))
      console.timeEnd("總編譯時間")
    }
  })
}

build/dev-modules.js

自定義本地開發時需要編譯的模塊,模塊名為 src/pages 下的文件夾名。

// 本地開發需要編譯的模塊
module.exports = [

]

vue.config.js

const chalk = require("chalk")

const devModuleList = require("./build/dev-modules")

const isProduction = process.env.NODE_ENV === "production"

// 總的頁面
const PAGES = require("./build/pages")

for (const basename in PAGES) {
  if (Object.prototype.hasOwnProperty.call(PAGES, basename)) {
    PAGES[basename].chunks = [
      "chunk-vue",
      "chunk-vendors",
      "chunk-common",
      `${basename}`
    ]
  }
}

let pages = {}
const moduleName = process.env.MODULE_NAME

if (isProduction) {
  // 構建模塊的名稱
  if (!PAGES[moduleName]) {
    console.log(chalk.red("**模塊名不正確**"))
    return
  }
  pages[moduleName] = PAGES[moduleName]
} else {
  // 本地開發編譯的模塊
  // 編譯全部
  if (process.env.DEV_MODULE === "all") {
    pages = PAGES
  } else {
    // 編譯部分模塊
    const moduleList = [
      // 固定編譯的模塊
      "index",
      "login",
      // 自定義編譯的模塊
      ...devModuleList
    ]
    moduleList.forEach(item => {
      pages[item] = PAGES[item]
    })
  }
}

module.exports = {
  // 這行代碼很重要
  publicPath: isProduction ? "./" : "/",
  pages,
  // 這行代碼很重要
  outputDir: isProduction ? `dist/${moduleName}` : "dist",
  productionSourceMap: false,
  css: {
    loaderOptions: {
      sass: {
        prependData: "@import "~@/styles/variables.scss";"
      }
    }
  },
  chainWebpack: (config) => {
    config.optimization.splitChunks({
      cacheGroups: {
        vue: {
          name: "chunk-vue",
          test: /[/]node_modules[/]_?(vue|vue-router|vuex|element-ui)(@.*)?[/]/,
          priority: -1,
          chunks: "initial"
        },
        vendors: {
          name: "chunk-vendors",
          test: /[/]node_modules[/]/,
          priority: -10,
          chunks: "initial"
        },
        common: {
          name: "chunk-common",
          minChunks: 2,
          priority: -20,
          chunks: "initial",
          reuseExistingChunk: true
        }
      }
    })
  }
}

package.json

{
  "scripts": {
    "serve": "vue-cli-service serve",
    "serve:all": "cross-env DEV_MODULE=all vue-cli-service serve",
    "build:test": "cross-env MODE=test node build/index.js",
    "build:prod": "cross-env MODE=prod node build/index.js",
    "lint": "vue-cli-service lint",
  }
}

本地開發

本地開發時,npm run serve 會編譯自定義的模塊目錄,npm run serve:all 會編譯全部模塊目錄。

本地開發時編譯后的目錄結構如下:

Vue-CLI多頁分目錄打包的步驟記錄

所以啟動后,需要將地址改為 http://localhost:8080/index/index.html 。

打包結果

構建時, npm run build:prod 打包全部頁面,npm run build:prod index 僅打包 index 頁面。

打包后的目錄結構如下:

Vue-CLI多頁分目錄打包的步驟記錄

這樣在不同模塊之間跳轉時,可以使用一致的相對路徑跳轉方式, ../index/index.html 。

打包后每個模塊的內容打包到一個單獨目錄下。

Github 地址

總結

到此這篇關于Vue-CLI多頁分目錄打包的文章就介紹到這了,更多相關Vue-CLI多頁分目錄打包內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/6950481985772978212

延伸 · 閱讀

精彩推薦
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術團隊7992021-12-22
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue2.x-使用防抖以及節流的示例

    Vue2.x-使用防抖以及節流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue2.x 項目性能優化之代碼優化的實現

    Vue2.x 項目性能優化之代碼優化的實現

    這篇文章主要介紹了Vue2.x 項目性能優化之代碼優化的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優小U9632022-02-21
  • vue.jsVue項目中實現帶參跳轉功能

    Vue項目中實現帶參跳轉功能

    最近做了一個手機端系統,其中遇到了父頁面需要攜帶參數跳轉至子頁面的問題,現已解決,下面分享一下實現過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js用vite搭建vue3應用的實現方法

    用vite搭建vue3應用的實現方法

    這篇文章主要介紹了用vite搭建vue3應用的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
主站蜘蛛池模板: 日本黄色一级电影 | 日韩在线观看中文字幕 | 国产日产久久高清欧美一区 | 亚洲视频一区二区 | 亚洲男人av| 91精品国产一区二区 | 国产精品久久一区 | 国产成人在线播放 | 久久午夜影院 | 国产欧美一区二区精品性色 | 中文日韩在线 | 亚洲视频一区二区三区 | 日韩视频中文字幕 | 黄色影片免费在线观看 | 国产不卡免费视频 | 成人精品 | 欧美一级在线 | 亚洲欧洲精品视频在线观看 | 久久久久无码国产精品一区 | 毛片一卡| 亚洲成人av在线 | 精品国产一级毛片 | 亚洲aⅴ天堂av在线电影软件 | 久久xx | 亚洲精品女人久久 | 欧美综合视频 | 在线日韩欧美 | 国产乱码精品一区二区三区av | 国外精品视频在线观看 | av瑟瑟| 国产精品高清在线 | 国产日韩在线视频 | 国产精品久久久久aaaa | 成年人免费看片 | 欧美日韩在线综合 | 日日摸夜夜添夜夜添高潮视频 | 午夜精品久久久久久久久久久久 | 99在线视频观看 | 一特黄a大片免费视频 视频 | 日本a在线天堂 | www久久久久|