vue-cli/基础组件全局自动化注册/vuex/modules智能引入

基础组件自动化

  • 利用 webpack的require.context

  • webpack的require.context 可参考 [博文]:https://segmentfault.com/a/1190000019723837

  • 基础组件需要满足命名规则 Basexxx

  • 需要直接放在Components文件夹下

    目录结构

目前方法可以全局自动注册BaseCmp,无法自动注册BaseForm

新增以下代码到你的main.js

/**
 * main.js 新增
 *
 * 2021-2-1
 * Wallace Chan
 */
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'

const requireComponent = require.context(
  // 其组件目录的相对路径
  './components',
  // 是否查询其子目录
  false,
  // 匹配基础组件文件名的正则表达式
  /Base[A-Z]\w+\.(vue|js)$/
)

requireComponent.keys().forEach(fileName => {
  // 获取组件配置
  const componentConfig = requireComponent(fileName)

  // 获取组件的 PascalCase 命名
  const componentName = upperFirst(
    camelCase(
      // 获取和目录深度无关的文件名
      fileName
        .split('/')
        .pop()
        .replace(/\.\w+$/, '')
    )
  )

BaseCmp组件直使用就不会报错咯,这样基础公共组件无需再反复引入和注册

<template>
  <div>
    <BaseCmp />
    <!--    <BaseForm />-->
  </div>
</template>

<script>
export default {
  name: 'CmpReg'
}
</script>

Vuex的modules智能引入

同样要符合常规目录结构

store/modules 下新建index.js

/**
 * store/modules/index.js
 *
 * 2021-2-2
 * Wallace Chan
 */
 
import camelCase from 'lodash/camelCase'
// Storing in variable a context with all files in this folder
// ending with `.js`.
const requireModule = require.context('.', false, /\.js$/)
const modules = {}

requireModule.keys().forEach(fileName => {
  if (fileName === './index.js') return
  // filter fullstops and extension
  // and return a camel-case name for the file
  const moduleName = camelCase(
    fileName.replace(/(\.\/|\.js)/g, '')
  )
  // create a dynamic object with all modules
  modules[moduleName] = {
    // add namespace here
    namespaced: true,
    ...requireModule(fileName).default
    // if you have exported the object with name in the module `js` file
    // e.g., export const name = {};
    // uncomment this line and comment the above
    // ...requireModule(fileName)[moduleName]
  }
})
export default modules

可以注释所有store/index.js里的所有module引入了!代码一下子清爽很多,并且无需修改module后再修改 store/index.js

/**
 * store/index.js
 *
 * 2021-2-2
 * Wallace Chan
 */

import Vue from 'vue'
import Vuex from 'vuex'
import createPersistedState from 'vuex-persistedstate'
import getters from './getters'

// import app from './modules/app'
// import settings from './modules/settings'
// import user from './modules/user'
// import menu from './modules/menu'
// import processData from './modules/processData'
// import battery from './modules/battery'
// import systemManage from '@/store/modules/systemManage/systemManage'
// import userManage from './modules/systemManage/userManage'

import modules from '@/store/modules'

Vue.use(Vuex)

const store = new Vuex.Store({
  plugins: [createPersistedState({
    storage: window.sessionStorage,
    reducer(val) {
      return {
        user: val.user
      }
    }
  })],
  modules,
  // modules: {
  //   app,
  //   settings,
  //   user,
  //   menu,
  //   processData,
  //   battery,
  //   userManage,
  //   systemManage
  // },
  getters
})

export default store

🔥🙇🔥来自大佬 Nikos Koikas:https://dev.to/nkoik/-vuex-pattern-smart-module-registration-15gc
🔥🙇🔥演讲地址:7 Secret Patterns Vue Consultants Don’t Want You to Know https://www.youtube.com/watch?v=7YZ5DwlLSt8&t=1047s
✍✍✍代码:https://gitee.com/hellocheng0903/vue-test-demo
尤雨溪身后的男人,不简单。虽然我英语挺烂,但是似乎他的演讲的确很生动有趣。
🚁🚅🚢 我们不生产代码,我们只是互联网的搬运工 📚
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在处理"Cannot find module 'webpack-cli/package.json'"错误时,可能存在几种原因。根据引用和的信息,这个错误可能是由于webpack-cli的位置无法正确获取造成的。在控制台输入webpack时,会运行node_modules\node_modules\webpack\bin\webpack.js文件,并检查是否安装了webpack-cli或webpack-command。如果没有安装其中之一,会提示你需要下载webpack-cli。如果只安装了webpack-cli,它会使用require.resolve获取webpack-cli/package.json的路径并加载模块。 如果你遇到这个错误,可以尝试以下解决方法: 1. 确保你已经全局或本地安装了webpack-cli。你可以使用npm install webpack-cli -g(全局安装)或npm install webpack-cli --save-dev(本地安装)来安装webpack-cli。 2. 如果已经安装了webpack-cli,可以尝试重新安装它,以确保安装过程中没有出现任何问题。 3. 检查你的项目的package.json文件,确保webpack-cli已经正确添加到依赖项中。如果没有添加,可以手动将其添加到package.json文件中,并运行npm install命令来安装它。 4. 如果以上方法都没有解决问题,可以尝试删除node_modules文件夹,并重新运行npm install命令来重新安装所有依赖项。 希望这些解决方法能够帮助你解决"Cannot find module 'webpack-cli/package.json'"的问题。如果问题仍然存在,请参考引用提供的信息,尝试下载所需的文件并放置在你的vue项目的node_modules文件夹下。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [webpack -v报错:Cannot find module ‘webpack-cli/package.json](https://blog.csdn.net/mashirokayo/article/details/127834908)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [手动解决Cannot find module '@sentry/webpack-plugin'等问题](https://download.csdn.net/download/jlq_diligence/28725246)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值