成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從零開始做Vue前端架構(gòu)(9)

Vicky / 1297人閱讀

摘要:那該怎么管理這兩個(gè)不同的項(xiàng)目呢解決子模塊用的的同學(xué)肯定一下子就想到子模塊的知識(shí)了。最后,也希望有想法的同學(xué)還有大佬多多留言,給點(diǎn)建議原文地址從零開始做前端架構(gòu)腳手架參考資料官方文檔使用定制前端腳手架別人寫的腳手架文件操作相關(guān)文檔子模塊

前言

相信很多人都用過vue-clicreate-react-app或者類似的腳手架。
腳手架方便我們復(fù)制,粘貼,或者clone代碼庫,而且還可以更具用戶的選擇,引入用戶所需要的插件。
腳手架往往搭配著早已設(shè)計(jì)好了架構(gòu)的項(xiàng)目,然后按需進(jìn)行拷貝。

Yeoman 介紹
官網(wǎng)介紹: The web"s scaffolding tool for modern webapps.

yeoman是一款來做腳手架的工具,我們借助它,就能很容易地開發(fā)出自己的腳手架了。
yeoman具體的使用,本文不會(huì)介紹太多,官網(wǎng)的文檔差不多就夠了,我也會(huì)在文章末尾放上自己搜集的一些參考資料,同學(xué)們自己看看就好了。

安裝

安裝yeoman: npm install -g yo

generator

generator其實(shí)就是一個(gè)node module,即npm。yeoman根據(jù)我們寫的generator來執(zhí)行我們寫的構(gòu)建代碼。(對(duì)怎么自己選一個(gè)npm包不熟悉的同學(xué),可以戳這里>>)
generator文件夾必須以generator-開頭,然后之后跟上自定義的腳手架名字,比如generator-zx-vue,將它做成npm包以后,上傳到npm官網(wǎng),只有在電腦上全局安裝,然后用yoman運(yùn)行就好了,之后會(huì)詳細(xì)介紹。

創(chuàng)建自己的generator

除了手動(dòng)創(chuàng)建自己的generator項(xiàng)目,我們還可以通過別人已經(jīng)做好的腳手架來創(chuàng)建。
安裝generator-generator: npm install -g generator-generator
然后,運(yùn)行腳手架: yo generator
之后,我們就可以看到一系列的提示,按照提示輸入完信息以后,我們就有了一份編寫自己的generator的模板項(xiàng)目了。

編寫自己的generator

其實(shí),這個(gè)generator腳手架生成的很多文件我們都不需要管,我們只需要把注意力放在generator/app這個(gè)文件夾下的內(nèi)容就好了。
templates文件是用來作為倉庫,我們?cè)诰帉懩_本的時(shí)候,如果需要哪些文件,就直接去這個(gè)倉庫里copy出來就好了。

劃重點(diǎn) 1. 問題

因?yàn)槲覀冏约鹤龅膅enerator是一個(gè)npm包,我們自然希望對(duì)其進(jìn)行版本管理,用上git,方便今后的迭代。
templates其實(shí)也是一個(gè)獨(dú)立的項(xiàng)目,我們之前說了,它是一個(gè)早已完成了的項(xiàng)目架子,我們是從gitlab或者github上copy過來的而已。那該怎么管理這兩個(gè)不同的項(xiàng)目呢?

2. 解決-git子模塊

git用的6的同學(xué)肯定一下子就想到git子模塊的知識(shí)了。
不熟悉的同學(xué)可以戳 git文檔-子模塊>>

因此,我們不是把項(xiàng)目copy進(jìn)templates,也不是git clone進(jìn)templates,而是先刪除app文件夾下的templates,然后:
git submodule add https://github.com/CodeLittlePrince/vue-construct-for-zx-vue.git templates
這樣的話,我們就可以更新自己的倉庫項(xiàng)目(vue-construct-for-zx-vue),generator項(xiàng)目的話,pull子模塊就好了。兩者保持獨(dú)立,方便迭代和維護(hù)。

編寫構(gòu)建腳本

接下來,我們就可以來編寫app文件夾下的index.js文件了:

const Generator = require("yeoman-generator")
const chalk = require("chalk")
const yosay = require("yosay")
const path = require("path")
const fs = require("fs")

module.exports = class extends Generator {
  initializing() {
    // 打印歡迎語
    this.log(
      yosay(`Welcome to the shining ${chalk.cyan("generator-zx-vue")} generator!`)
    )
  }
  prompting() {
    // 讓用戶選擇是否需要包含vuex
    const prompts = [
      {
        type: "input",
        name: "name",
        message: "Name of project:",
        default: path.basename(process.cwd())
      },
      {
        type: "input",
        name: "description",
        message: "Description:",
        default: "",
      },
      // {
      //   type: "confirm",
      //   name: "includeVuex",
      //   message: "Would you like to include Vuex in your project?",
      //   default: false,
      // }
    ]
    return this.prompt(prompts).then(answers => {
      this.name = answers.name
      this.description = answers.description
      // this.includeVuex = answers.includeVuex
      this.log(chalk.green("name: ", this.name))
      this.log(chalk.green("description: ", this.description))
      // this.log(chalk.green("includeVuex: ", this.includeVuex))
    })
  }

  writing() {
    // 復(fù)制普通文件
    // https://github.com/sboudrias/mem-fs-editor
    this.fs.copyTpl(
      this.templatePath(),
      this.destinationPath(),
      {
        name: this.name
      },
      {},
      { globOptions:
        {
          dot: true
        }
      }
    )
    // 根據(jù)用戶選擇,決定是否安裝vuex
    if (this.includeVuex) {
      const pkgJson = {
        name: this.name,
        description: this.description,
        // dependencies: {
        //   vuex: "^3.0.1"
        // }
      }
      // Extend or create package.json file in destination path
      this.fs.extendJSON(this.destinationPath("package.json"), pkgJson)
    }
  }

  install() {
    this.npmInstall()
  }

  end() {
    this.log(chalk.green("Construction completed!"))
  }
}

語法很簡(jiǎn)單,具體可以自己看yeoman官方文檔,我簡(jiǎn)單的介紹一下幾個(gè)比較常用的函數(shù),或者說生命周期:

函數(shù)名 我用來做什么
initializing 我用來寫一些歡迎語
prompting 與用戶的交互,比如input、checkbox、confirm等
writing 拷貝和編輯文件
install 安裝依賴,如npm install
end 寫一些如goodbye的結(jié)束語
本地測(cè)試是否有用

沒發(fā)布上線的npm包,本地測(cè)試只需要link一下就好了,到generator根目錄,然后運(yùn)行npm link,這樣我們就可以使用我們的generator了,比如,到一個(gè)新的空文件夾下運(yùn)行:yo zx-vue,就可以看到項(xiàng)目開始自動(dòng)構(gòu)建了。
測(cè)試完成后,就可以發(fā)布到npm官網(wǎng)了,發(fā)布流程可參考我另一篇文章npm-從0開始寫一個(gè)npm module

zx-vue 目的

zx-vue是一個(gè)以vue-construct作為模板倉庫的腳手架,為了方便新項(xiàng)目構(gòu)建,也為了今后的新項(xiàng)目能夠統(tǒng)一。

使用

首先,安裝全局yeomman和generator-zx-vue
npm install -g yo
npm install -g generator-zx-vue
然后找一個(gè)空的文件夾執(zhí)行:
yo zx-vue
生成項(xiàng)目以后的操作可以參考vue-construct
最后,generator-zx-vue的地址是generator-zx-vue

結(jié)尾

我之前原本打算把vuex作為一個(gè)可選項(xiàng),讓用戶選擇是否引入這個(gè)庫。
但是,做下來以后發(fā)現(xiàn),因?yàn)橛玫搅薳js模板去做這個(gè)事情,然后,最終輸出的文件會(huì)因?yàn)?b><% if (condition) { %>這種ejs語法導(dǎo)致?lián)Q行,或者縮進(jìn)不符合eslint。當(dāng)然,我也可以把項(xiàng)目弄的更空一點(diǎn),把所有vuex的使用清掉,但這樣也不是很好,因?yàn)槲矣窒胱層脩襞芷饋磉@個(gè)項(xiàng)目就能看到整個(gè)全家桶的效果在頁面上使用到。
其實(shí)還有另外一種比較暴力的方法就是,我弄一個(gè)有vuex的項(xiàng)目,一個(gè)沒有vuex的項(xiàng)目,然后選擇copy哪份,,太暴力。
憋了好久也沒想到什么很好接受的方法,所以就暫且把vuex也直接帶上。
最后,也希望有想法的同學(xué)還有大佬多多留言,給點(diǎn)建議^_^

原文地址

從零開始做Vue前端架構(gòu)(9)腳手架

參考資料

yeoman官方文檔

使用Yeoman定制前端腳手架

別人寫的腳手架generator-webapp

文件操作相關(guān)

ejs文檔

git-子模塊

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11873.html

相關(guān)文章

  • 從零開始Vue前端架構(gòu)(3)

    摘要:前言這一篇,我們將接著上篇來完成創(chuàng)建項(xiàng)目文件目錄架構(gòu)??偨Y(jié)這篇主要是文件和目錄架構(gòu)的東西,讀者務(wù)必運(yùn)行一下完整的項(xiàng)目。因此,下一篇,我們將通過實(shí)現(xiàn)本地?cái)?shù)據(jù)接口模擬從零開始做前端架構(gòu)項(xiàng)目完整代碼前端架構(gòu)子咻 前言 這一篇,我們將接著上篇來完成創(chuàng)建項(xiàng)目文件、目錄架構(gòu)。 回顧 先回顧一下現(xiàn)在項(xiàng)目有哪些東西了: . ├── app │?? ├── app.vue │?? ├── common ...

    dinfer 評(píng)論0 收藏0
  • 從零開始Vue前端架構(gòu)(4)

    摘要:前言上一篇我們遇到少年,是不是忘了的警告,這一篇我們就來解決這個(gè)問題??偨Y(jié)通過實(shí)現(xiàn)前后端分離,并且使用來更方便的模擬數(shù)據(jù)。下一篇,我們創(chuàng)建發(fā)布環(huán)境下的配置文件,并且看看怎么優(yōu)化產(chǎn)出的代碼的從零開始做前端架構(gòu)項(xiàng)目完整代碼前端架構(gòu)子咻 前言 上一篇我們遇到少年,是不是忘了npm run mock?的警告,這一篇我們就來解決這個(gè)問題。 開發(fā) 一、安裝包 安裝koa和一系列的包(我們用的是ko...

    xuweijian 評(píng)論0 收藏0
  • 從零開始Vue前端架構(gòu)(1)

    摘要:前言想想也已經(jīng)做過不少架構(gòu)的項(xiàng)目了,有基于,基于,基于,基于的。好了,介紹完畢,接下來,我就從零開始,一步一步建起前后端完全分離的前端架構(gòu)了。 前言 想想也已經(jīng)做過不少架構(gòu)的項(xiàng)目了,有基于vue,基于react,基于thinkPHP,基于laravel的。 做多了,也就對(duì)現(xiàn)有的架構(gòu)有各種想法,有好的,有壞的,總之,用起來還是不爽。vue-cli雖然可以很快地構(gòu)建并使用,尤其是vue-c...

    frolc 評(píng)論0 收藏0
  • 從零開始Vue前端架構(gòu)(2)

    摘要:前言這一篇,我們將接著上篇來完成配置。開發(fā)一配置我們采用的方式來創(chuàng)建。對(duì)了,前提我們需要全局安裝。三配置創(chuàng)建文件,上配置配置總結(jié)這篇不多,就做了三件事,。下一篇我們將創(chuàng)建項(xiàng)目文件目錄架構(gòu)從零開始做前端架構(gòu)項(xiàng)目完整代碼前端架構(gòu)子咻 前言 這一篇,我們將接著上篇來完成配置eslint、babel、postcss。 開發(fā) 一、配置eslint 我們采用eslint --init的方式來創(chuàng)建e...

    Brenner 評(píng)論0 收藏0
  • 從零開始Vue前端架構(gòu)(2)

    摘要:前言這一篇,我們將接著上篇來完成配置。開發(fā)一配置我們采用的方式來創(chuàng)建。對(duì)了,前提我們需要全局安裝。三配置創(chuàng)建文件,上配置配置總結(jié)這篇不多,就做了三件事,。下一篇我們將創(chuàng)建項(xiàng)目文件目錄架構(gòu)從零開始做前端架構(gòu)項(xiàng)目完整代碼前端架構(gòu)子咻 前言 這一篇,我們將接著上篇來完成配置eslint、babel、postcss。 開發(fā) 一、配置eslint 我們采用eslint --init的方式來創(chuàng)建e...

    YanceyOfficial 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<