vue-cli 多目录多项目配置

本文介绍了一种基于Vue-cli的多项目管理方案,通过调整配置文件和目录结构,实现了在一个工程中管理多个独立的H5项目,有效减少重复工作,提高开发效率。

业务需求场景

项目中经常会有一些相互独立的活动类H5开发,而这些H5的一些基础配置以及一些公用组件和用户接口都是一模一样的,当量多的时候,如果每次都init一个新的项目,把之前的公用代码copy过去,显然重复的工作量很多,也不符合我们偷懒的精神,此时我们就需要一个能管理多个类似项目的管理模式,实现一个工程管理多个项目来解放我们的双手。

希望实现的是在电脑上安装一次依赖,以后在该工程下新建  项目A、项目B、项目C等都直接在该工程下建立个文件夹、就能跑起来。最外层是公用依赖,每个项目有自己的依赖,这样项目之间的组件就可以轻松复用。

希望本地运行   使用  npm run dev xxxx项目名   来切换不同的项目。发布的时候使用命令  npm run build xxxx项目名  来打包发布。

主要目录结构

.
|-- build                           // 工程构建(webpack)相关代码
|-- config                          // 工程开发环境配置
|-- dist                            // 产出目录
|   |-- project1                    // 项目1
|       |-- static                  // 项目1-压缩静态文件
|       |-- index.html              // 项目1-压缩入口html
|   |-- project2                    // 项目2
|   |-- project3                    // 项目3
|-- src                             // 工程源码目录
|   |-- common                    // 工程公共库
|   |-- project1                    // 项目1
|       |-- components              // 项目1-vue公共组件
|       |-- store                   // 项目1-vuex的状态管理
|       |-- App.vue                 // 项目1-页面入口文件
|       |-- main.js                 // 项目1-程序入口文件,加载各种公共组件
|       |-- index.html              // 项目1-模板入口文件
|   |-- project2                    // 项目2
|   |-- project3                    // 项目3
|   |-- projectN                    // 项目N...
.

使用方法

开发环境
npm run dev -- --env.name=project1 (项目名称)

打包项目
npm run build project1 (项目名称)

1、先创建一个普通的Vue-cli 项目

1.1、修改config/index.js
module.exports = {}  上面增加代码

const projectDir = process.argv[process.argv.length - 1].replace(/^(\S)*=/, '')
if(!projectDir){
  console.log('> 温馨提示:项目名称不能为空 (project name)')
  return;
}

module.exports = {}  中找到 build  节点中的index  assetsRoot  修改如下:


index: path.resolve(__dirname, '../dist/'+ projectDir + '/' +'index.html'),
assetsRoot: path.resolve(__dirname, '../dist/'+ projectDir ),

1.2、修改build/webpack.base.conf.js
module.exports = {}  上面增加代码

const projectDir = process.argv[process.argv.length - 1].replace(/^(\S)*=/, '')
if(!projectDir){
  console.log('> 温馨提示:项目名称不能为空 (project name)')
  return;
}

module.exports = {}  中找到 entry  节点中的 app 修改如下:

entry: {
    // app: './src/main.js'
    //**入口文件**
    app: './src/'+ projectDir + '/main.js'
},

resolve  节点中的 alias 修改如下:

alias: {
   'vue$': 'vue/dist/vue.esm.js',
   // '@': resolve('src'),
   '@': resolve('src/'+ projectDir)
}

module -> rules  节点中的 test: /\.js$/  这一段的  include  修改如下:

// include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
include: [resolve('src/'+ projectDir), resolve('test'), resolve('node_modules/webpack-dev-server/client')]

1.3、修改build/webpack.prod.conf.js
const webpackConfig = merge(baseWebpackConfig, {}  上面增加代码

const projectDir = process.argv[process.argv.length - 1].replace(/^(\S)*=/, '')
if(!projectDir){
  console.log('> 温馨提示:项目名称不能为空 (project name)')
  return;
}

找到  new HtmlWebpackPlugin({})   修改  template  值如下:

template: 'src/'+ projectDir +'/index.html',

1.4、修改build/webpack.dev.conf.js
const devWebpackConfig = merge(baseWebpackConfig, {}  上面增加代码

const projectDir = process.argv[process.argv.length - 1].replace(/^(\S)*=/, '')
if(!projectDir){
  console.log('> 温馨提示:项目名称不能为空 (project name)')
  return;
}

找到  new HtmlWebpackPlugin({})   修改  template  值如下:

template: 'src/'+ projectDir +'/index.html',

 

 

2、修改目录结构

2.1、在src 目录下创建项目目录  比如我创建的是 project1  这个名字根据自己需求来,不一定要跟我的一样
2.2、把原有项目中的App.vue、index.html、main.js文件和 router、assets、components目录全部移动到  该项目文件夹下
至此 project1 目录创建完成、如果想创建更多的项目,按照 project1 的结构和文件依次创建即可。此时的目录结构是这样的:

3、使用命令

和平时一样命令 在后面 加上你的项目文件夹的名字即可,例如:

npm run dev -- --env.name=project1
npm run build project1

运行成功、打开浏览器,输入对应的地址,此时可以自己通过命令切换不同的项目来运行。

=======================================================================================================================================

(下面是我参考的地址和遇到的问题,这里说明下)

参考地址:http://auan.cn/front/1900.html

参考地址里面还有1.5和1.6,原本我这里试了,发现启动失败。报pipe not fount错误,能力有限 未能解决,如有大神,请留言,万分感激。

所以上面步骤里把1.5和1.6去掉了,以下是原地址里面的1.5和1.6

1.5、创建文件   build/devServer.js  内容如下:

const cprocess = require('child_process')
let entryDir = process.argv[process.argv.length-1]
let cmd = 'npm run startdev -- --env.name=' + entryDir
let dev = cprocess.exec(cmd, {detached: true} ,function(error, startdevout, startdeverr) {
  if(error) console.log(error)
})
dev.startdevout.pipe(process.startdevout)
dev.startdeverr.pipe(process.startdeverr)

1.6、修改 package.json 文件  找到 scripts 节点 修改如下:

"scripts": {
    "dev": "node build/devServer.js",
    "startdev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js"
},
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值