vue-cli-plugin-ut-builder
TypeScript icon, indicating that this package has built-in type declarations

2.0.8 • Public • Published

Vue 命令行插件

定制化的配置服务,进一步精简开发配置。

与 vue-cli 服务深度整合,可基于环境变量文件定制构建需求。

多页应用下,可基于路径配置自动生成 pages 配置。

定制的脚手架,构建发布流程,待开发中...

安装

npm install vue-cli-plugin-ut-builder -D

使用示例

配置定义

// vue.config.js

const outputDir = 'dist'
const assetsDir = ''

module.exports = {
  // vue-cli内置配置项(更多可查看vue-cli官网)
  outputDir,
  assetsDir,
  // vue-cli自定义插件的配置(下面配置项被vue-cli-plugin-ut-builder插件支持)
  pluginOptions: {
    // 是否开启代码预处理
    preprocess: true,
    // 对根据目录名称生成的HTML文件进行改名(主要应用于多页应用)
    pageNameMap: {
      csa: 'index',
    },
    // 使用到的服务配置(每一个配置项的值将作为参数传给相应的服务)
    // 服务可以将构建任务细化,一个服务内可以调用多个插件(webpack插件)来进行操作
    service: {
      // 自动精灵图
      sprites: {
        src: {
          cwd: 'src/assets/images/icons/', // 小图标目录
          glob: '**/*.png', // 图标名称匹配规则,glob语法
        },
        iconClass: 'icon', // 图标样式命名空间,可以设为空字符串(不使用命名空间)
        classPrefix: 'icon', // 图标样式名前缀
        kebabCaseName: true, // 样式名称格式,为true转为连字符格式
      },
      dll: {
        'dll.vendors': ['vue', 'vuex', 'vue-router'],
      },
      // 导出webpack、vue-cli配置(不带webpack://则为导出vue-cli配置),也可以使用数组导出多个文件
      // 参数值为字符串时将被解析为导出文件的路径
      eject: 'webpack://build.webpack.js',
      // 拷贝资源
      // 也可以使用数组传参,参数值格式同'copy-webpack-plugin'的参数
      copy: {
        'src/assets/img': `${outputDir}/${assetsDir}/img`,
      },
      // 未使用的代码文件提示
      unused: true,
      // 构建耗时提示
      timeCost: true,
      // html插件配置
      html: {
        // 属性名为页面名称模式匹配字符串
        '.*': {},
        '^index$': {},
      },
      // 产品压缩打包服务(仅产品模式有效,使用zip打包格式)
      // 打多个包可用数组传参
      compress: {
        // 可指定要拷贝并压缩的资源(不指定则使用构建输出目录下的所有资源)
        // 路径相对于outputDir,可使用glob路径语法
        copy: { '*.html': 'templates/', '!(*.html)/**/*': 'static/' },
        // 压缩包的路径名称,不指定则是npm包名加版本号(路径相对于工程根路径,也可指定为绝对路径)
        name: 'dist.zip',
      },
      // 接口mock服务
      mock: {
        // mock模块文件存放路径
        path: 'mock',
        // 全局接口返回延迟定义
        delay: 1000,
        // 自动初始化接口定义模块文件
        init: true,
        // 定位接口声明位置
        locate: true,
        // 是否开启http接口mock,默认开启
        // 如果只需要对socket进行mock,则可以通过此项关闭对http的mock
        http: true,
        // 开启websocket mock
        ws: {
          context: ['/foo'],
          channel: ['message', 'echo'],
          client: 'socket.io',
          port: 8080,
        },
      },
      // 调用自定义服务
      myService: {
        // 可以给服务传递相应参数
        xxx: true,
      },
    },
    // 注册自定义的服务
    registerService: {
      // 服务项为一个函数
      myService({ plugin, config, isDev, env, watch }, options, projectOptions) {
        // 第一个参数是一个对象,可对其进行解构
        // 第二个参数options为调用服务时,传给服务的参数(上面service配置里面项的值)
        // 第三个参数projectOptions为整个工程的vue-cli构建配置项

        // plugin.use可以应用一个插件并修改插件的配置参数
        // 第一个参数作为插件名称来解析,如果加载不到插件,将尝试使用xxx-webpack-plugin的名称来加载插件
        // 比如plugin.use('html', ()=>{}),如果没有加载到名为 html 的插件,则会尝试加载 html-webpack-plugin
        plugin.use('myPlugin', (args) => {
          // plugin.use可使用相应的webpack插件
          // args为当前该插件的构建参数,可对其进行修改,或返回一个新的插件参数数组
          return args
        })
        // 同一个插件可以被多次使用(初始化为不同的插件实例)
        // 以连字符连接的名称,会将第一个连字符前的名称作为插件名称
        // 如果要将整个名称都作为插件名称,可以使用^前缀,比如 ^myPlugin-all 则告知要使用名称为myPlugin-all的插件
        // 或者还可以使用对象来指定插件名称(不会进行名称解析): { pluginName:'myPlugin-all', configName: 'plugin-all' }
        // 其中 configName 将会作为config实例的插件key使用,其默认会使用第一个参数的完整(字符串)值
        plugin.use('myPlugin-another', (args) => {
          //
          return args
        })
        // 使用config.plugin也可以达到上面的目的,实际上plugin.use是对config.plugin的封装
        // 用config来修改插件配置时,未声明过的插件要使用use来指定构造函数,而已声明的插件再次修改时使用use则会报错
        // 所以推荐使用plugin.use来对插件配置进行修改(方法内对这些要求进行了处理)
        config.plugin('myPlugin').tap((args) => {
          return args
        })
        // config还可以修改其他更多的配置项,比如entry,rule等,可参考'webpack-chain'
        config
          .entry('index')
          .add('src/index.js')
          .end()
      },
    },
    // 注册自定义的插件(webpack插件),插件可被服务使用
    registerPlugin: {
      // webpack插件必须为一个构造函数(实例对象需包含apply方法)
      // 可以使用class来声明一个插件类
      myPlugin: class {
        constructor(options) {
          // options为插件的参数
        }
        // apply方法会被webpack调用
        apply(compiler) {
          // compiler为webpack的编译器实例
          // 更多的webpack插件开发内容,可参考webpack官方文档
        }
      },
    },
  },
}

环境变量文件

  # .env
  # 模块入口
  BUILD_MODULE_ENTRY = src/pages/*/App.vue
  # html模板页面路径
  BUILD_HTML_TEMPLATE = public/index.html
  # 只构建指定的模块,用逗号分隔的字符串或者正则表达式字面量
  BUILD_MODULE_FILTER =
  # 是否构建多页应用
  BUILD_MPA = false
  # 是否使用模块懒加载
  BUILD_CODE_SPLITTING = true
  # 使用vuex
  BUILD_APP_USE_VUEX = true
  # 使用vue router
  BUILD_APP_USE_ROUTER = true
  # 根App路径
  BUILD_ROOT_APP_PATH = src/App.vue
  # 全局Store路径
  BUILD_GLOBAL_STORE_PATH = src/store.js
  # 全局Router路径
  BUILD_GLOBAL_ROUTER_PATH = src/router.js
  # 模块router文件名称(可以是相对于模块目录的子目录文件路径)
  BUILD_MODULE_ROUTER_NAME = router.js
  # 模块store文件名称(可以是相对于模块目录的子目录文件路径)
  BUILD_MODULE_STORE_NAME = store.js

插件服务(Service)

开发中...

脚手架生成(Generator)

开发中...

开发与发布流程定制

开发中...

Readme

Keywords

Package Sidebar

Install

npm i vue-cli-plugin-ut-builder@2.0.8

Version

2.0.8

License

MIT

Unpacked Size

438 kB

Total Files

108

Last publish

Collaborators

  • star2018