1.0.1 • Published 3 years ago

automatic-webpack-plugin v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

AUTOMATIC-WEBPACK-PLUGIN

组件自动化注册、页面自动化注册

安装

npm install automatic-webpack-plugin

需要环境

  • webpack >= 4
  • Nodes >= 8

配置参数

  • useFileboolean default: false description: 是否监听文件(默认只监听文件夹)
  • maxlevelstring default: 1 description: 文件监听层级
  • inPathstring default: 没有默认必传参数 description: 监听的文件路径
  • outPathstring default: inPath + '/index.js' description: 自动生成的文件
  • templateEachfunction default: 没有默认必传参数 param: fileName文件名称 param: filePath文件路径 description 需要遍历生成的模板
  • outfunction default template => template param: template遍历生成的文本 param: modules模块 description: 最终生成的文本

示例(详细配置见example)

 const path = require('path');
 const AutoMaticWebpackPlugin = require('automatic-webpack-plugin');
 
 module.exports = {
     configureWebpack: {
         plugins: [
             new AutoMaticWebpackPlugin([
                 /************组件自动化注册************/
                 {
                     // 使用文件模式
                     useFile: false,
                     /*********** 组件自动化注册 ***********/
                     // 文件监听等级
                     maxlevel: 2,
                      // 监听./src/components/*下的文件夹
                     inPath: './src/components',
                     outPath: './src/components/index.js',
                     // 模版
                     // fileName: 文件夹名字
                     // filePath: 文件夹路径
                     templateEach: (fileName, filePath) => {
                         return `Vue.component('${fileName}', () => import('${filePath}'));`
                     },
                     /**
                      * 输出模版
                      * template: 模版名称
                      * modules: 模版模块名称
                      */
                     out: (template, modules) => {
                         return `
                             /**
                              * Date ${new Date()}
                              * 组件自动化注册
                             */
                            import Vue from 'vue/dist/vue.esm.js';
                            ${template}
                         `;
                     },
                     // 自动新建index入口文件
                     addIndex: [
                         {
                             // 创建目录
                             state: 'dir',
                             name: 'blocks'
                         },
                         {
                             // 创建默认index.vue
                             state: 'file',
                             name: 'blocks/index.js',
                             template: (fileName, filePath) => {
                                 return `
                                     export default {
                                         name: '${fileName}-template'
                                     }
                                 `;
                             }
                         },
                         {
                             // 默认样式
                             state: 'file',
                             name: 'style.css',
                             template: (fileName, filePath) => {
                                 return `
                                     .${fileName} {}
                                 `;
                             }
                         },
                         {
                             // 默认逻辑js
                             state: 'file',
                             name: 'page.js',
                             template: (fileName, filePath) => {
                                 return `
                                     export default {
                                         name: '${fileName}'
                                     }
                                 `;
                             }
                         },
                         {
                             // 创建默认index.vue
                             state: 'file',
                             name: 'index.vue',
                             template: (fileName, filePath) => {
                                 return `
                                     <template>
                                         <div>
                                             <h3>路由${fileName}</h3>
                                         </div>
                                     </template>
                                     <style scoped src='./style.css'></style>
                                     <script src='./page.js'></script>
                                 `;
                             }
                         }
                     ]
                 },
                 /************路由自动化注册*************/
                 {
                     maxLength: 1,
                     inPath: './src/pages',
                     // 模板
                     // fileName: 文件夹名称
                     // filePath: 文件夹路径
                     templateEach: (fileName, filePath) => {
                         return `{ path: '/${fileName}', component: () => import('${filePath}') },`;
                     },
                     /** 
                      * 输出模板
                      * template: 模板名称
                      * modules: 模板模块名称
                     */
                     out: (template, modules) => {
                         return `
                             /**
                              *  Date ${new Date()}
                              *  路由自动化注册
                              */
                             import VueRouter from 'vue-router';
 
                             // 路由配置
                             const routes = [
                                 { path: '/', redirect: '/page1' },
                                 ${template}
                             ];
 
                             // 实例化路由
                             const router = new VueRouter({
                                 routes
                             });
                             export default router;
                         `;
                     },
                     addIndex: [
                         {
                             // 创建目录
                             state: 'dir',
                             name: 'blocks'
                         },
                         {
                             // 创建默认index.vue
                             state: 'file',
                             name: 'blocks/index.js',
                             template: (fileName, filePath) => {
                                 return `
                                     export default {
                                         name: '${fileName}-template'
                                     }
                                 `;
                             }
                         },
                         {
                             // 默认样式
                             state: 'file',
                             name: 'style.css',
                             template: (fileName, filePath) => {
                                 return `
                                     .${fileName} {}
                                 `;
                             }
                         },
                         {
                             // 默认逻辑js
                             state: 'file',
                             name: 'page.js',
                             template: (fileName, filePath) => {
                                 return `
                                     export default {
                                         name: '${fileName}'
                                     }
                                 `;
                             }
                         },
                         {
                             // 默认路由
                             state: 'file',
                             name: 'index.vue',
                             template: (fileName, filePath) => {
                                 return `
                                     <template>
                                         <div>
                                             <h3>路由${fileName}</h3>
                                         </div>
                                     </template>
                                     <style scoped src='./style.css'></style>
                                     <script src='./page.js'></script>
                                 `;
                             }
                         }
                     ]  
                 }
             ])
         ]
     }
 }