91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

發布時間:2020-08-19 20:49:22 來源:腳本之家 閱讀:228 作者:多多ing 欄目:web開發

介紹

做前端的大家都知道通過 vue 開發的項目每次創建新組建的時候,都要新建一個目錄,然后新增 .vue 文件,在這個文件中再寫入 template 、 script 、 style 這些內容,雖然在寫入的時候大家都有自己的自動補全共計,不過這些都是模板性的,每次都要這樣重復操作,很麻煩有沒有。

本文就是通過node來幫助我們,自動去執行這些重復操作,而我們只需要告訴控制臺我們需要創建的組件名字就可以了。
本文自動創建的組件包含兩個文件:入口文件 index.js 、vue文件 main.vue

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

chalk工具

為了方便我們能看清控制臺輸出的各種語句,我們先安裝一下 chalk

npm install chalk --save-dev

1. 創建views

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

  • 在 scripts 中創建 generateView 文件夾
  • 在 generateView 中新建 index.js ,放置生成組件的代碼
  • 在 generateView 中新建 template.js ,放置組件模板的代碼,模板內容可根據項目需求自行修改

index.js

// index.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 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)
      }
    })
  })
}
log('請輸入要生成的頁面組件名稱、會生成在 views/目錄下')
let componentName = ''
process.stdin.on('data', async chunk => {
  // 組件名稱
  const inputName = String(chunk).trim().toString()
  // Vue頁面組件路徑
  const componentPath = resolve('../../src/views', inputName)
  // vue文件
  const vueFile = resolve(componentPath, 'main.vue')
  // 入口文件
  const entryFile = resolve(componentPath, 'entry.js')
  // 判斷組件文件夾是否存在
  const hasComponentExists = fs.existsSync(componentPath)
  if (hasComponentExists) {
    errorLog(`${inputName}頁面組件已存在,請重新輸入`)
    return
  } else {
    log(`正在生成 component 目錄 ${componentPath}`)
    await dotExistDirectoryCreate(componentPath)
  }
  try {
    // 獲取組件名
    if (inputName.includes('/')) {
      const inputArr = inputName.split('/')
      componentName = inputArr[inputArr.length - 1]
    } else {
      componentName = inputName
    }
    log(`正在生成 vue 文件 ${vueFile}`)
    await generateFile(vueFile, vueTemplate(componentName))
    log(`正在生成 entry 文件 ${entryFile}`)
    await generateFile(entryFile, entryTemplate(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()
    })
  }
}

template.js

// template.js
module.exports = {
  vueTemplate: compoenntName => {
    return `<template>
 <div class="${compoenntName}">
 ${compoenntName}組件
 </div>
</template>
<script>
export default {
 name: '${compoenntName}'
};
</script>
<style lang="stylus" scoped>
.${compoenntName} {
};
</style>`
  },
  entryTemplate: compoenntName => {
    return `import ${compoenntName} from './main.vue'
export default [{
 path: "/${compoenntName}",
 name: "${compoenntName}",
 component: ${compoenntName}
}]`
  }
}

1.1 配置package.json

"new:view": "node ./scripts/generateView/index"

如果使用 npm 的話 就是 npm run new:view
如果是 yarn 自行修改命令

1.2 結果

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

2. 創建component

跟views基本一樣的步驟

  • 在 scripts 中創建 generateComponent 文件夾
  • 在 generateComponent 中新建 index.js ,放置生成組件的代碼
  • 在 generateComponent 中新建 template.js ,放置組件模板的代碼,模板內容可根據項目需求自行修改

index.js

// index.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 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)
      }
    })
  })
}
log('請輸入要生成的組件名稱、如需生成全局組件,請加 global/ 前綴')
let componentName = ''
process.stdin.on('data', async chunk => {
  const inputName = String(chunk).trim().toString()
    /**
     * 組件目錄路徑
     */
  const componentDirectory = resolve('../../src/components', 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)
      // fs.mkdirSync(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)
  }
  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()
    })
  }
}

template.js

// template.js
module.exports = {
  vueTemplate: compoenntName => {
    return `<template>
 <div class="${compoenntName}">
 ${compoenntName}組件
 </div>
</template>
<script>
export default {
 name: '${compoenntName}'
};
</script>
<style lang="stylus" scoped>
.${compoenntName} {
};
</style>`
  },
  entryTemplate: `import Main from './main.vue'
export default Main`
}

2.1 配置package.json

"new:comp": "node ./scripts/generateComponent/index"

  • 如果使用 npm 的話 就是 npm run new:comp
  • 如果是 yarn 自行修改命令

2.2 結果

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component

通過以上的 vue-cli3 優化,我們項目在開發的過程中就能非常方便的通過命令快速創建公共組件和其他頁面了,在頁面、組件比較多的項目中,可以為我們提高一些效率,也可以通過這樣的命令,來控制團隊內不同人員新建文件的格式規范。

總結

以上所述是小編給大家介紹的vue-cli3 項目優化之通過 node 自動生成組件模板 generate View、Component,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!

向AI問一下細節

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

AI

沂源县| 寿宁县| 和平区| 手游| 长沙县| 广宁县| 韶关市| 定南县| 西乌珠穆沁旗| 和田县| 惠州市| 西藏| 民权县| 英超| 长葛市| 黄龙县| 邹城市| 东乡| 灯塔市| 信宜市| 璧山县| 韩城市| 尚志市| 仪征市| 曲阜市| 龙山县| 临颍县| 诸暨市| 兰坪| 中江县| 仙桃市| 沙洋县| 灯塔市| 湟中县| 泸水县| 郴州市| 藁城市| 隆昌县| 元氏县| 宣汉县| 邯郸县|