亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue多組件倉庫開發與發布詳解

2019-11-19 12:03:42
字體:
來源:轉載
供稿:網友

在開發組件時,我們可能會期望一類組件放在同一個代碼倉庫下,就像element那樣,我們可以使用element提供的腳手架,也可以使用vue cli 3創建一個更‘新'的項目。

項目創建

通過vue cli 3創建項目,創建文件夾packages用于存放組件。

單個組件目錄

在packages下就是每一個組件,每個組件和單獨項目一樣,會有package.json、README.md、src、dist等文件及目錄。

如何演示/調試組件

在組件開發過稱中,我們需要對組件進行展示,所以創建了examples文件夾,用于存放每個組件示例。

通過一個列表展示出所有的組件,點擊選擇當前開發的組件,進入對應的example。

路由的根就是一個導航列表,然后每個組件對應一個路由,通過一個配置文件的components.js來生成這個路由。

// 路由import Navigation from "./Navigation";import components from "./components";let routes = components.map(component => ({ path: `/${component.name}`, component: () => import(`../examples/${component.name}`)}));routes.unshift({ path: "", component: Navigation});export default routes;

自動化腳本

創建/編譯/發布

創建新的組件,需要修改components.js配置文件,在examples和packages下創建對應目錄。

編譯/發布組件,因為倉庫下會有多個組件,如果一次發布多個,就需要進入每個文件夾下執行命令。

上面過程實現自動化,有很多種方式,比如可以通過npm run <script>,可以直接通過node命令等。這里我參考element,采用了Makefile。

創建script文件夾,其中包括創建腳本new.js和構建腳本build.js。

創建腳本

創建腳本主要就是目錄的創建與文件的寫入,其中可能需要注意的可能就是格式問題。

一種方式是在``之間,按照規范格式去完成寫入內容,這樣做比較麻煩,而且可能面臨格式化要求修改問題。

另一種方式是在腳本中引入eslint,腳本中的eslint.CLIEngine可以根據配置文件(比如.eslintrc.js)格式化文件。需要注意的是需要比命令行中配置需要多添加fix: true配置, 如下

const CLIEngine = eslint.CLIEngine;const cli = new CLIEngine({ ...require("../.eslintrc.js"), fix: true });

eslint在腳本中的使用方法,更具體的可以參考eslint文檔中Node.js API部分。

// scripts/new.js部分...components.push({ label: newName, name: newName})const updateConfig = function(path, components) { writeFile(path, `module.exports = ${JSON.stringify(components)}`).then(() => {  console.log("完成components.js")  // 格式化  CLIEngine.outputFixes(cli.executeOnFiles([configPath])) })}const createPackages = function(componentName) { try {  const dir = path.resolve(__dirname, `../packages/${componentName}/`)  // 創建文件夾  if (!fs.existsSync(dir)) {   fs.mkdirSync(dir)   console.log(`完成創建packages/${componentName}文件夾`)  }  // 寫入README  if (!fs.existsSync(`${dir}/README.md`)) {   writeFile(    `${dir}/README.md`,    `## ${componentName}  ### 使用說明      `   ).then(() => {    console.log("完成創建README")   })  }  // 寫入package.json  if (!fs.existsSync(`${dir}/package.json`)) {   writeFile(    `${dir}/package.json`,    `{ "name": "@hy/${componentName}", "version": "1.0.0", "description": "${componentName}", "main": "./dist/hy-${componentName}.umd.min.js", "keywords": [  "${componentName}",  "vue" ], "author": "", "license": "ISC"}    `   ).then(() => {    console.log("完成創建package.json")   })  }  // 創建index.js  if (!fs.existsSync(`${dir}/index.js`)) {   writeFile(`${dir}/index.js`, `export {}`).then(() => {    console.log("完成創建index.js")    CLIEngine.outputFixes(cli.executeOnFiles([`${dir}/index.js`]))   })  } } catch (err) {  console.error(err) }}const createExample = function(componentName) { try {  const dir = path.resolve(__dirname, `../examples/${componentName}/`)  // 創建文件夾  if (!fs.existsSync(dir)) {   fs.mkdirSync(dir)   console.log(`完成創建examples/${componentName}文件夾`)  }  // 寫入index.vue  if (!fs.existsSync(`${dir}/index.vue`)) {   writeFile(    `${dir}/index.vue`,    `<template></template><script>import { } from '../../packages/${componentName}/index'export default { components: {}}</script>   `   ).then(() => {    console.log(`完成創建examples/${componentName}/index.vue文件`)    // 格式化index.vue    CLIEngine.outputFixes(cli.executeOnFiles([`${dir}/index.vue`]))   })  } } catch (err) {  console.error(err) }}...

構建腳本

// build.js...async function build() { for (let i = 0, len = components.length; i < len; i++) {  const name = components[i].name  await buildService.run(   "build",   {    _: ["build", `${root}/packages/${name}/src/index.js`],    target: "lib",    name: `hy-${name}`,    dest: `${root}/packages/${name}/dist`,    // 生成格式: umd格式會同時成功demo.html commonjs,umd,umd-min    formats: "commonjs,umd-min"    // clean: false   },   ["--target=all", `./packages/${name}/src/index.js`]  ) }}...

Lerna

lerna是一個多包倉庫管理的工具,可以幫助創建、管理、發布多包倉庫中的包。

關于lerna我也沒有太深入得使用,只是用到了發布。首先在項目下執行init初始化了項目,在每次commit之后,可以執行publish。lerna會對應代碼庫打tag,并發布到npm倉庫。

項目版本問題

0.0.1為不規范版本號,最小應該從1.0.0開始。npm publish無法發布,但是lerna publish可以發布。

導致結果安裝為固定版本號,而不是以^開頭的版本號范圍。outdate可以檢測到有更新,無法通過update升級。

組件開發

組件開發主要是在packages/<component name>/src目錄下進行,在example/<component name>/目錄下可以引入該組件src下的源文件,用一些數據來進行開發測試。組件開發和項目中的組件開發基本相同。

作為組件庫中的組件,需要更多的考慮其通用性和易用性。不能為了通用而加入很多的屬性,而使其失去易用性;同樣也不能為了易用,而使其過于簡單,使用范圍過于局限。

對于每一個屬性、每個拋出去的方法,都需要認真考慮其必要性。

唯一不同的地方可能需要注意的是導出的方式。

一種是直接導出組件,這種形式在使用時需要引入,并且在components中聲明,也就是局部注冊。

另一種是添加install方法后導出。這種形式需要調用vue.use方法,相當于全局注冊。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线观看免费| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品国产suv| 久久久av亚洲男天堂| 91亚洲午夜在线| 亚洲欧洲日产国码av系列天堂| 青草热久免费精品视频| 国产精品久久久久免费a∨| 国产精品欧美激情在线播放| 亚洲精品中文字幕女同| 日韩av影片在线观看| 永久免费毛片在线播放不卡| 日本一本a高清免费不卡| 国产精品日韩久久久久| 这里精品视频免费| 欧美激情精品久久久久久黑人| 欧美亚洲视频在线看网址| 亚洲自拍偷拍福利| 欧美肥臀大乳一区二区免费视频| 97人人做人人爱| 久久久91精品国产一区不卡| 亚洲视频在线免费看| 亚洲片av在线| 亚洲影院高清在线| 不卡av电影院| 亚洲人精品午夜在线观看| 欧美精品一区二区三区国产精品| 国产成人精品一区| 国产精品亚洲片夜色在线| 国产精品wwww| 国产精品视频一区国模私拍| 国产午夜精品一区理论片飘花| 亚洲精品videossex少妇| 亚洲视频精品在线| www日韩中文字幕在线看| 日韩精品日韩在线观看| 亚洲亚裔videos黑人hd| 日韩精品小视频| 全球成人中文在线| 91精品综合久久久久久五月天| 97在线看免费观看视频在线观看| 国产亚洲精品91在线| 插插插亚洲综合网| 国产精品美女主播在线观看纯欲| 亚洲二区在线播放视频| 成人激情在线观看| 亚洲欧美www| 亚洲成人黄色网| 亚洲a级在线观看| 久久精品视频中文字幕| 91人人爽人人爽人人精88v| 久久人91精品久久久久久不卡| 国产欧美久久久久久| 日韩精品高清在线观看| 国产一区二区三区三区在线观看| 欧美久久精品一级黑人c片| 亚洲成人精品久久久| 国产日韩欧美影视| 7m精品福利视频导航| 欧美理论电影在线播放| 中文字幕亚洲无线码a| 国产亚洲欧美日韩美女| 91免费看视频.| 在线精品国产成人综合| 国产欧美日韩精品丝袜高跟鞋| 欧美大片大片在线播放| 亚洲精品98久久久久久中文字幕| 日韩精品免费综合视频在线播放| 欧美乱大交做爰xxxⅹ性3| 亚洲国产精品成人一区二区| 国产精品精品视频| 成人黄在线观看| 亚洲欧美www| 91国产美女视频| 欧美电影免费观看| 91久久久亚洲精品| 日本午夜在线亚洲.国产| 最好看的2019的中文字幕视频| 国产精品情侣自拍| 欧美专区国产专区| 亚洲va久久久噜噜噜久久天堂| 色悠久久久久综合先锋影音下载| 亚洲新中文字幕| 亚洲欧美日韩国产成人| 亚洲成人黄色在线观看| 97精品国产97久久久久久| 久热爱精品视频线路一| 欧美性xxxxx| 国产999精品| 久久综合久久八八| 国产美女久久精品香蕉69| 日韩欧美在线视频观看| 成人中文字幕在线观看| 中文字幕日韩欧美精品在线观看| 亚洲欧美另类在线观看| 久久伊人精品一区二区三区| 国产亚洲欧洲高清| 国内精品久久久久久中文字幕| 亚洲午夜国产成人av电影男同| 欧美在线视频一二三| 97av在线视频免费播放| 色婷婷综合久久久久中文字幕1| 欧美激情精品久久久久久黑人| 国产精品成人免费电影| 亚洲精品美女久久| …久久精品99久久香蕉国产| 日韩色av导航| 亚洲精品电影网站| 国产成人精品久久亚洲高清不卡| 久久99精品久久久久久青青91| 欧美激情精品久久久| 亚洲精品一区在线观看香蕉| 欧美裸体xxxxx| 亚洲影视九九影院在线观看| 国产成人91久久精品| 亚洲伊人久久大香线蕉av| 亚洲人成网站色ww在线| 国产精品一久久香蕉国产线看观看| 国产精品一区二区三区久久| 欧美激情图片区| 欧美成人黄色小视频| 国模叶桐国产精品一区| 久久久女人电视剧免费播放下载| 91精品国产91久久久久久久久| 国产精品91一区| 久久久精品国产亚洲| 亚洲女人天堂色在线7777| www.日本久久久久com.| 国产精品第2页| 日韩久久免费电影| 国产精品日韩欧美| 亚洲人午夜精品免费| 欧美大荫蒂xxx| 在线播放亚洲激情| 亚洲第一天堂av| 国产日本欧美在线观看| 欧美视频在线看| 亚洲精选在线观看| 青青a在线精品免费观看| 日本三级韩国三级久久| 日韩av免费在线播放| 色综合男人天堂| 久久夜精品香蕉| 国产一区二区三区高清在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 日本高清不卡的在线| 91精品久久久久久综合乱菊| 亚洲国产美女精品久久久久∴| 日韩国产高清污视频在线观看| 欧美性猛交99久久久久99按摩| 亚洲japanese制服美女| 精品久久在线播放| 亚洲精品短视频| 日本久久中文字幕| 国产精品福利观看| 亚洲天堂开心观看| 国产美女主播一区| 亚洲天堂成人在线视频| 久久精品欧美视频| 精品偷拍各种wc美女嘘嘘| 最好看的2019的中文字幕视频| 国产精品久久久久91| 欧美亚洲日本黄色| 热久久美女精品天天吊色|