中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么通過npm或yarn自動生成vue組件

發布時間:2022-05-05 17:08:42 來源:億速云 閱讀:198 作者:iii 欄目:大數據

這篇文章主要介紹“怎么通過npm或yarn自動生成vue組件”,在日常操作中,相信很多人在怎么通過npm或yarn自動生成vue組件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么通過npm或yarn自動生成vue組件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

實踐步驟

安裝一下chalk,這個插件能讓我們的控制臺輸出語句有各種顏色區分

npm install chalk --save-dev 
yarn add chalk --save-dev

在根目錄中創建一個 scripts 文件夾

新增一個generateComponent.js文件,放置生成組件的代碼

新增一個template.js文件,放置組件模板的代碼

template.js文件,里面的內容可以自己自定義,符合當前項目的模板即可

// template.js
module.exports = {
 vueTemplate: compoenntName => {
  return `<template>
 <div class="${compoenntName}">
  ${compoenntName}組件
 </div>
</template>

<script>
export default {
 name: '${compoenntName}'
}
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
.${compoenntName} {

}
</style>

`
 },
 entryTemplate: `import Main from './main.vue'
export default Main`
}

generateComponent.js生成vue目錄和文件的代碼

// generateComponent.js`
const chalk = require('chalk') // 控制臺打印彩色
const path = require('path')
const fs = require('fs')
const resolve = (...file) => path.resolve(__dirname, ...file)
const log = message => console.log(chalk.green(`${message}`))
const successLog = message => console.log(chalk.blue(`${message}`))
const errorLog = error => console.log(chalk.red(`${error}`))
const { vueTemplate, entryTemplate } = require('./template')
const _ = process.argv.splice(2)[0] === '-com'

const generateFile = (path, data) => {
 if (fs.existsSync(path)) {
  errorLog(`${path}文件已存在`)
  return
 }
 return new Promise((resolve, reject) => {
  fs.writeFile(path, data, 'utf8', err => {
   if (err) {
    errorLog(err.message)
    reject(err)
   } else {
    resolve(true)
   }
  })
 })
}

// 公共組件目錄src/base,全局注冊組件目錄src/base/global,頁面組件目錄src/components
_ ? log('請輸入要生成的組件名稱、如需生成全局組件,請加 global/ 前綴') : log('請輸入要生成的頁面組件名稱、會生成在 components/目錄下')
let componentName = ''
process.stdin.on('data', async chunk => {
 const inputName = String(chunk).trim().toString()

 // 根據不同類型組件分別處理
 if (_) {
  // 組件目錄路徑
  const componentDirectory = resolve('../src/base', inputName)
  // vue組件路徑
  const componentVueName = resolve(componentDirectory, 'main.vue')
  // 入口文件路徑
  const entryComponentName = resolve(componentDirectory, 'index.js')

  const hasComponentDirectory = fs.existsSync(componentDirectory)
  if (hasComponentDirectory) {
   errorLog(`${inputName}組件目錄已存在,請重新輸入`)
   return
  } else {
   log(`正在生成 component 目錄 ${componentDirectory}`)
   await dotExistDirectoryCreate(componentDirectory)
  }

  try {
   if (inputName.includes('/')) {
    const inputArr = inputName.split('/')
    componentName = inputArr[inputArr.length - 1]
   } else {
    componentName = inputName
   }
   log(`正在生成 vue 文件 ${componentVueName}`)
   await generateFile(componentVueName, vueTemplate(componentName))
   log(`正在生成 entry 文件 ${entryComponentName}`)
   await generateFile(entryComponentName, entryTemplate)
   successLog('生成成功')
  } catch (e) {
   errorLog(e.message)
  }
 } else {
  const inputArr = inputName.split('/')
  const directory = inputArr[0]
  let componentName = inputArr[inputArr.length - 1]

  // 頁面組件目錄
  const componentDirectory = resolve('../src/components', directory)

  // vue組件
  const componentVueName = resolve(componentDirectory, `${componentName}.vue`)

  const hasComponentDirectory = fs.existsSync(componentDirectory)
  if (hasComponentDirectory) {
   log(`${componentDirectory}組件目錄已存在,直接生成vue文件`)
  } else {
   log(`正在生成 component 目錄 ${componentDirectory}`)
   await dotExistDirectoryCreate(componentDirectory)
  }

  try {
   log(`正在生成 vue 文件 ${componentName}`)
   await generateFile(componentVueName, vueTemplate(componentName))
   successLog('生成成功')
  } catch (e) {
   errorLog(e.message)
  }
 }

 process.stdin.emit('end')
})

process.stdin.on('end', () => {
 log('exit')
 process.exit()
})

function dotExistDirectoryCreate (directory) {
 return new Promise((resolve) => {
  mkdirs(directory, function () {
   resolve(true)
  })
 })
}

// 遞歸創建目錄
function mkdirs (directory, callback) {
 var exists = fs.existsSync(directory)
 if (exists) {
  callback()
 } else {
  mkdirs(path.dirname(directory), function () {
   fs.mkdirSync(directory)
   callback()
  })
 }
}

配置package.json,scripts新增兩行命令,其中-com是為了區別是創建頁面組件還是公共組件

"scripts": {
  "new:view":"node scripts/generateComponent",
  "new:com": "node scripts/generateComponent -com"
 },

執行

  npm run new:view // 生成頁組件
  npm run new:com // 生成基礎組件
  或者
  yarn run new:view // 生成頁組件
  yarn run new:com // 生成基礎組件

怎么通過npm或yarn自動生成vue組件

到此,關于“怎么通過npm或yarn自動生成vue組件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安徽省| 文登市| 永嘉县| 呈贡县| 股票| 怀化市| 宜宾县| 定远县| 昆山市| 牟定县| 五常市| 革吉县| 临安市| 青铜峡市| 荣成市| 黄骅市| 桦南县| 梁山县| 墨竹工卡县| 兰西县| 会昌县| 永州市| 马关县| 灵台县| 连南| 定西市| 琼中| 商洛市| 琼海市| 襄城县| 宁夏| 枞阳县| 临安市| 伊宁市| 临澧县| 英山县| 崇文区| 临沧市| 阳曲县| 曲水县| 武义县|