iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue-CLI多页分目录打包的步骤记录
  • 720
分享到

Vue-CLI多页分目录打包的步骤记录

2024-04-02 19:04:59 720人浏览 安东尼
摘要

页面目录结构 注意需要将默认的 html 模板文件 public/index.html  移动到根目录下。 安装依赖 npm i --save-dev cross-en

页面目录结构

注意需要将默认的 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 会编译全部模块目录。

本地开发时编译后的目录结构如下:

所以启动后,需要将地址改为 Http://localhost:8080/index/index.html 。

打包结果

构建时, npm run build:prod 打包全部页面,npm run build:prod index 仅打包 index 页面。

打包后的目录结构如下:

这样在不同模块之间跳转时,可以使用一致的相对路径跳转方式, ../index/index.html 。

打包后每个模块的内容打包到一个单独目录下。

GitHub 地址

总结

到此这篇关于Vue-CLI多页分目录打包的文章就介绍到这了,更多相关Vue-CLI多页分目录打包内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue-CLI多页分目录打包的步骤记录

本文链接: https://www.lsjlt.com/news/123678.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue-CLI多页分目录打包的步骤记录
    页面目录结构 注意需要将默认的 html 模板文件 public/index.html  移动到根目录下。 安装依赖 npm i --save-dev cross-en...
    99+
    2024-04-02
  • 使用Vue-CLI怎么实现多页分目录打包
    使用Vue-CLI怎么实现多页分目录打包?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。页面目录结构注意需要将默认的 html 模板文件 public/index.html&nb...
    99+
    2023-06-14
  • vue-cli创建vue项目的详细步骤记录
    目录什么是Vue脚手架vue-cli创建vue项目总结什么是Vue脚手架 Vue脚手架,也就是vue cli。如果我们平时只是写一些简单的页面的时候,只需要下载vue.js就行了。但...
    99+
    2024-04-02
  • Vue项目打包并发布的完整步骤记录
    目录1、安装部署Nginx服务器。(类似Tomcat服务器)2、Vue项目打包。总结如何将Vue项目打包并发布?我这边是测试发布到本地,不过步骤是一样的,步骤如下: 1、安装部署Ng...
    99+
    2024-04-02
  • Vue项目打包部署的实战过程记录
    目录前言一、准备工作——服务器和nginx使用1. 准备一台服务器2. nginx安装和启动3. 了解nginx: 修改nginx配置,让nginx服务器代理我们创建的文件二、Vue...
    99+
    2024-04-02
  • vue项目打包优化的方法实战记录
    目录1.按需加载第三方库2.移除console.log3. Close SourceMap4. Externals && CDN5.路由懒加载的方式总结1.按需加载第...
    99+
    2024-04-02
  • 将java普通项目打包成exe可执行文件的步骤记录
    前言 · 提示,无论打包成jar还是exe程序,运行都需要JDK,需要给没有安装JDK的电脑安装;不会安装JDK的朋友可以参考这篇文章:https://www.jb51.net/ar...
    99+
    2024-04-02
  • Vue项目中封装组件的简单步骤记录
    目录前言 如何封装一个Toast组件 使用案例 具体实现 总结前言 随着业务的发展 功能性开发 已经无法满足我们对于前端的需求,这一篇主要带大家体验一下如何开发一套属于自己的组件库...
    99+
    2024-04-02
  • electron打包vue项目的方法步骤
    目录创建项目添加electron-builderelectron下载失败窗体运行打包exe白屏创建项目 点击这里 添加electron-builder 1、在项目目录下运行命令:vu...
    99+
    2024-04-02
  • vue-cli中目录结构的示例分析
    这篇文章将为大家详细讲解有关vue-cli中目录结构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、├── build // 项目构建(webpack)相关代...
    99+
    2024-04-02
  • vue3使用vue-router的完整步骤记录
    前言 对于大多数单页应用程序而言,管理路由是一项必不可少的功能。随着新版本的Vue Router处于Alpha阶段,我们已经可以开始查看下一个版本的Vue中它是如何工作的。 Vue3...
    99+
    2024-04-02
  • Vue接口封装的完整步骤记录
    首先根据接口写好对应页面的请求 内容如图尽量保证js文件名称与页面文件名称相同(易于查找) 根据文件目录动态引入/导出接口 提高便捷性 const modulesFil...
    99+
    2024-04-02
  • PyCharm创建Django项目的简单步骤记录
    目录1.创建虚拟环境2.激活虚拟环境3.安装Django4.在Django下创建项目5.创建数据库6.查看项目7.创建应用程序7. 1.激活模型8.定义URL总结1.创建虚拟环境 首...
    99+
    2024-04-02
  • 脚手架(vue-cli)创建Vue项目的超详细过程记录
    目录cli3.x/4.x创建Vue项目1.创建项目2.项目手动配置3.选择vue版本4.路由模式5.配置文件的存放位置6.配置保存项目创建成功总结 cli3.x/4.x创建...
    99+
    2024-04-02
  • Webpack实现多页面打包的方法步骤
    目录1. 多页面应用(MPA)概念2. 多页面打包基本思路3. 多页面打包通用方案4. 多页面打包实现1. 多页面应用(MPA)概念 单页面在开发时会把所有的业务放在一个大的入口里面...
    99+
    2023-01-09
    Webpack 多页面打包 webpack打包多页面
  • vue cli3 实现分环境打包的步骤
    用cli3搭建的vue项目号称零配置文件,为了方便打包(不用手动来回改不同环境进行打包)那么我们在需要打包的时候分不同环境打包怎么办呢 1.在根目录下创建三个配置文件,如下图 这里...
    99+
    2024-04-02
  • vue封装TabBar组件的完整步骤记录
    目录实现思路: 步骤一:TabBar和TabBarItem的组件封装步骤二:给TabBarItem传入active图片步骤三:TabBarItem和路由的结合效果步骤四:TabBar...
    99+
    2024-04-02
  • vue项目打包以及优化的实现步骤
    目录vue项目的打包上线及优化vue项目的打包项目托管项目的常见优化vue项目的打包上线及优化 项目完成,我们会将项目进行上线,为了提升性能,我们往往会进行一些优化处理 vue项...
    99+
    2024-04-02
  • vue项目打包发布上线的方法步骤
    目录一、开发环境到生产环境的转变二、设置统一的请求路径 三、运行打包命令vue项目开发完成后,我们需要将项目打包上线,同时我们希望可以在本地预览生产环境项目 (以vue-c...
    99+
    2024-04-02
  • vue项目打包部署跨域的实现步骤
    目录1.前端工程解决办法1.1开发时候解决办法1.2打包部署后解决办法2.后端工程解决办法跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过...
    99+
    2023-05-20
    vue 打包部署跨域 vue 打包跨域
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作