vue-cli系列之vue-cli本身引用了哪些包?延续更新中……

概述

当vue-cli建立了一个vue-demo后,我们运用npm run serve就能够启动项目了。经由过程package.json中的serve敕令我们能够看到,现实是启动了vue-cli-service serve这个敕令。这个敕令现实上是启动了一段node剧本,那这个剧本引用了哪些包呢?让我们来一探终究。

semver

概述:这个包是用来做版本号范例处置惩罚的,能够校验一个输入的版本号是不是相符范例,以及某个包是不是满足某个版本。

实例:检测本机node版本是不是相符vue-cli需求的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)
}

npm 链接:https://www.npmjs.com/package…

minimist

概述:这个包是用来处置惩罚敕令行的参数输入的。

实例:检测敕令行参数中是不是有以下几个参数

const args = require('minimist')(rawArgv, {
  boolean: [
    // build
    'modern',
    'report',
    'report-json',
    'watch',
    // serve
    'open',
    'copy',
    'https',
    // inspect
    'verbose'
  ]
})

npm链接:https://www.npmjs.com/package…

debug

概述: 一个轻量级的调试东西,依据参数返回一个打印毛病的函数。看起来是能够让差别的毛病输出更清楚,色彩很美。
实例: 为差别的毛病建立差别的毛病输出函数

const logger = debug('vue:env'); //挪用该函数会输出以vue:env开首的字符串。
//...此处省略很多营业代码
debug('vue:project-config')(this.projectOptions) // 输出vue:project-config开首的字符串。

npm链接:https://www.npmjs.com/package…

chalk

概述:能够以差别的款式输出字符串到终端
实例:打印不一段字符串,个中关键字加粗

if (fileConfig) {
  if (pkgConfig) {
    warn(
      `"vue" field in package.json ignored ` +
      `due to presence of ${chalk.bold('vue.config.js')}.`
    )
    warn(
      `You should migrate it into ${chalk.bold('vue.config.js')} ` +
      `and remove it from package.json.`
    )
  }
  resolved = fileConfig
  resolvedFrom = 'vue.config.js'
}

npm链接:https://www.npmjs.com/package…

joi

概述:一个js范例&字段考证的库。相似schemas的观点。
实例:vue-cli中为了确保设置对象的正确性,定义了一个底本,去校验设置的正确性(主如果校验用户设置,比方vue.config.js中的输入)

const schema = createSchema(joi => joi.object({
  baseUrl: joi.string().allow(''),
  publicPath: joi.string().allow(''),
  outputDir: joi.string(),
  assetsDir: joi.string().allow(''),
  indexPath: joi.string(),
  filenameHashing: joi.boolean(),
  runtimeCompiler: joi.boolean(),
  transpileDependencies: joi.array(),
  productionSourceMap: joi.boolean(),
  parallel: joi.boolean(),
  devServer: joi.object(),
  pages: joi.object().pattern(
    /\w+/,
    joi.alternatives().try([
      joi.string(),
      joi.object().keys({
        entry: joi.string().required()
      }).unknown(true)
    ])
  ),
  crossorigin: joi.string().valid(['', 'anonymous', 'use-credentials']),
  integrity: joi.boolean(),

  // css
  css: joi.object({
    modules: joi.boolean(),
    extract: joi.alternatives().try(joi.boolean(), joi.object()),
    sourceMap: joi.boolean(),
    loaderOptions: joi.object({
      css: joi.object(),
      sass: joi.object(),
      less: joi.object(),
      stylus: joi.object(),
      postcss: joi.object()
    })
  }),

  // webpack
  chainWebpack: joi.func(),
  configureWebpack: joi.alternatives().try(
    joi.object(),
    joi.func()
  ),

  // known runtime options for built-in plugins
  lintOnSave: joi.any().valid([true, false, 'error']),
  pwa: joi.object(),

  // 3rd party plugin options
  pluginOptions: joi.object()
}))

npm链接:https://www.npmjs.com/package…

lodash.defaultsDeep

概述:lodash这个包供应的一个函数,有点相似Object.assign()这个函数,能够用来默许参数添补。
实例:vue中,兼并用户设置(vue.config.js)与默许设置。

// lodash官方案例:
_.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
// => { 'a': { 'b': 2, 'c': 3 } }
// vue-cli中的运用
this.projectOptions = defaultsDeep(userOptions, defaults());
// 这里贴上vue-cli的默许设置
exports.defaults = () => ({
  // project deployment base
  publicPath: '/',

  // where to output built files
  outputDir: 'dist',

  // where to put static assets (js/css/img/font/...)
  assetsDir: '',

  // filename for index.html (relative to outputDir)
  indexPath: 'index.html',

  // whether filename will contain hash part
  filenameHashing: true,

  // boolean, use full build?
  runtimeCompiler: false,

  // deps to transpile
  transpileDependencies: [/* string or regex */],

  // sourceMap for production build?
  productionSourceMap: !process.env.VUE_CLI_TEST,

  // use thread-loader for babel & TS in production build
  // enabled by default if the machine has more than 1 cores
  parallel: hasMultipleCores(),

  // multi-page config
  pages: undefined,

  // <script type="module" crossorigin="use-credentials">
  // #1656, #1867, #2025
  crossorigin: undefined,

  // subresource integrity
  integrity: false,

  css: {
    // extract: true,
    // modules: false,
    // localIdentName: '[name]_[local]_[hash:base64:5]',
    // sourceMap: false,
    // loaderOptions: {}
  },

  // whether to use eslint-loader
  lintOnSave: true,

  devServer: {
  /*
    open: process.platform === 'darwin',
    host: '0.0.0.0',
    port: 8080,
    https: false,
    hotOnly: false,
    proxy: null, // string | Object
    before: app => {}
  */
  }
})

portfinder

概述:用来查询一个给定局限内的,一个可用的端口号。
实例:查询一个可用的端口号。

// 设置搜检局限的肇端端口号。
portfinder.basePort = args.port || process.env.PORT || projectDevServerOptions.port || defaults.port
//port是一个promise,.then中能够获得详细的端口
const port = await portfinder.getPortPromise();
//运用port
const urls = prepareURLs(
  protocol,
  host,
  port,
  isAbsoluteUrl(options.baseUrl) ? '/' : options.baseUrl
)
    原文作者:A_大白
    原文地址: https://segmentfault.com/a/1190000017874943
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞