vue-cli 3.0脚手架配置及扩展 (六):npm run serve 和 npm run build 拦截修改

修改文件为:path node_modules/@vue/cli-service/bin/vue-cli-service.js,该文件的修改基于vue-cli的版本为3.0.0-rc.2版本,这是node_modules内部文件,所以在升级vue-cli3.0时会被覆盖掉,所以建议存档,并且修改package.json中的本地开发依赖配置对象devDependencies,修改以‘@vue/’开头的依赖包为固定版本,即去除^和~

本文件主要对npm run serve 和 npm run build 命令进行拦截,获得我们自定义的命令参数后,再对命令进行还原。文档请求了AppConf类,请自行修改路径。

代码如下:

#!/usr/bin/env node

/**
 * @fileOverview vue脚手架命令服务入口
 * @modifyBy Franks.T.D
 * @modifyDate 2018/06/16
 * @modifyOverview 增加命令包装:serve时支持模块启动;build时必须指定一个存在的应用名
 * @path node_modules/@vue/cli-service/bin/vue-cli-service.js
 */

const semver = require('semver')
const { error } = require('@vue/cli-shared-utils')
const requiredVersion = require('../package.json').engines.node
if (!semver.satisfies(process.version, requiredVersion)) {
  error(
    `You are using Node ${process.version}, but vue-cli-service ` +
    `requires Node ${requiredVersion}.\nPlease upgrade your Node version.`
  )
  process.exit(1)
}
const [Service, AppConf] = [
  require('../lib/Service'),
  require('../../../../src/assets/js/libs/apps_config_class')
]
let rawArgv = process.argv.slice(2)
const [appconf, newArgv] = [
  new AppConf(),
  process.argv.slice(3)
]
if (rawArgv[0] === 'serve' && rawArgv.length !== 1 && !appconf.modulesExist(newArgv)) {
  console.log('ERR! 存在错误模块名参数,可启动模块:', ...appconf.modules)
  return false
} else if (rawArgv[0] === 'build' && (rawArgv.length === 1 || newArgv.length > 1 || !appconf.appsExist(newArgv))) {
  console.log('ERR! 缺少应用名参数 或 存在错误应用名参数,可构建应用:', ...appconf.apps)
  return false
} else {
  rawArgv = rawArgv.filter(key => !newArgv.includes(key))
}
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
const args = require('minimist')(rawArgv)
const command = args._[0]
service.run(command, args, rawArgv).catch(err => {
  error(err)
  process.exit(1)
})


npm run serve 命令在修改后支持在后面加入模块名,即单独启动单个模块,模块为config.app.js中CONTEXT_DIRECTORY中所有被数组包含的模块名,模块名可不指定或指定多个,但指定后一定要全正确,否则会报自定义错误,命令使用如下:

npm run serve mod1 // 启动mod1模块
npm run serve mod1 mod2 // 启动mod1模块和mod2模块,多个模块可以隶属于不同应用
npm run serve // 启动本工程下所有模块

npm run build 命令在修改后必须指定应用名,只支持单个应用名参数,应用名为config.app.js中APP_NAME中所配置,命令使用如下:

npm run build www // 启动www应用,假设为前台
npm run build memberCenter // 启动memberCenter应用,假设为会员中心
npm run build www memberCenter // ERR! 缺少应用名参数 或 存在错误应用名参数 ......
npm run build // ERR! 缺少应用名参数 或 存在错误应用名参数 ......

本文件执行时获取到serve或者build携带参数后,实际上是对命令进行了包装,因为本文件为bash输入命令后第一个进入的执行文档,此处可对用户的错误命令进行及时终止并进行使用引导

参考阅读《vue-cli 3.0脚手架配置及扩展 (二):vue.config.js多页配置》《vue-cli 3.0脚手架配置及扩展 (四):VueConf类》

你可能感兴趣的:(webpack,Node.js,gulp,vue,es6)