日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
基于Strview.js項目腳手架StrviewApp是怎么搭建起來的?

前言

前幾天,因為借著看源碼的熱乎勁,搞了一個玩具Js庫Strview.js。為什么會搞這么一個玩具庫呢?其實也不全是因為晚上閑的沒事,主要還是想通過實操來鍛煉自己的開發(fā)能力。之前,我也寫過一篇文章,那篇文章只是大體介紹了一下,沒有深究。之前大家可能覺得它跟Vue.js差不多,是的,正是借鑒Vue.js的思想,但是有些地方還是不一樣(個人覺得)。所以,今天,這篇文章介紹基于Strview.js搭建的項目腳手架工具StrviewApp。如果你覺得對自己有用,可以繼續(xù)看下去。如果覺得這篇肯定是篇垃圾文章,你也可以避而遠之。好了,我們現(xiàn)在就進去正題。準備好了嗎?一起跟我來吧!

創(chuàng)新互聯(lián)專注于淮北網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供淮北營銷型網(wǎng)站建設,淮北網(wǎng)站制作、淮北網(wǎng)頁設計、淮北網(wǎng)站官網(wǎng)定制、小程序設計服務,打造淮北網(wǎng)絡公司原創(chuàng)品牌,更為您提供淮北網(wǎng)站排名全網(wǎng)營銷落地服務。

快速上手StrviewAPP

你可以通過StrviewCLI快速初始化StrviewAPP項目,你可以這樣:

全局安裝。

 
 
 
 
  1. npm i strview-cli -g

安裝完成之后,你可以查看版本。

 
 
 
 
  1. strview-cli -v

最后,就是初始化項目了, 是自定義項目名稱。

 
 
 
 
  1. strview-cli init 

or

 
 
 
 
  1. strview-cli i 

這樣,一個StrviewAPP項目就這么搭建完成了。

StrviewAPP項目結構

下圖就是StrviewAPP項目組織結構。

下面,我將介紹每個文件及文件夾的作用。

  • config

這個是webpack配置文件夾,關于webpack的配置都在這配置。文件夾中里面有如下三個文件,分別如下:

 
 
 
 
  1. - webpack.base.js // 基礎配置
  2. - webpack.dev.js // 開發(fā)環(huán)境配置
  3. - webpack.pro.js // 生產(chǎn)環(huán)境配置
  • public

資源文件夾。

 
 
 
 
  1. - favicon.ico  // 網(wǎng)站標識
  2. - index.html  // 模板文件
  • .gitignore

哪些文件不需要添加到版本管理中。

  • .prettierrc

Prettier 規(guī)則配置文件。

  • package.json

定義了這個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數(shù)據(jù))。

  • src

這個文件夾是StrviewAPP項目的主要文件夾,下面我們來看下這個文件夾里面到底有什么。

 
 
 
 
  1. - assets //存放靜態(tài)文件
  2. - components // 組件文件夾
  3. - data // 公用狀態(tài)文件夾
  4. - methods // 方法文件夾
  5. - style // 樣式文件夾
  6. - template // 模板文件夾
  7. - App.js // 頁面入口
  8. - main.js // 項目入口文件

Src文件夾詳析

上面我們分析完了項目結構,那么下面我們將進一步分析Src文件夾中的文件構成以及它們之間如何配合的。

1. main.js

首先,我們看下main.js文件,這是項目入口文件,我們來看下文件中的內(nèi)容。

 
 
 
 
  1. import { createView } from 'strview';
  2. import data from './data';
  3. import App from './App';
  4. import methods from './methods';
  5. createView({
  6.   el: "#app",
  7.   template: App,
  8.   data
  9. });
  10. // The event is handled after the createview API
  11. methods();

我們先引入了strview.js,導入createView這個API用于創(chuàng)建視圖。那么,我們我們跳到下面看下這個API是怎么使用的。首先我們傳入一個對象字面量,第一個屬性是el屬性,它是掛載的DOM節(jié)點。第二個屬性是template屬性,它是用于顯示視圖的模板。第三個屬性是data屬性,傳入值為顯示的數(shù)據(jù)。最后,我們看到有這么一行注釋The event is handled after the createview API,意思是事件方法必須要在createViewAPI之后調(diào)用,即這里的methods();。

2. App.js

上面說到,App.js用與顯示視圖的模板,那么下面我們來看下。

 
 
 
 
  1. import myParagraph from './components/myParagraph';
  2. import card from './components/card';
  3. import helloTemplate from './template/helloTemplate';
  4. import './style/index.css';
  5. const App = `
  6. ${helloTemplate}
  7.     點擊
  8.     {a},,(a和b都改變)

  9.     
  10.       
  11. {age}
  12.       
  13. {name}
  14.       
  15. {msg}
  16.     
  17.     {a},(a會改變)

  18.     ,(b會改變)

  19.     
  20.     

    {obj.a.b}

  21.     

    {arr}

  22.     

    {ob.name}

  • ${myParagraph}
  • ${card}
  • `
  • export default App
  • 我們看到在代碼的末尾導出了一個模板字符串,也就是常量App。我們可以看到模板字符串中都是些類似標簽語句的代碼。是的,這也是Strview.js的關鍵之處,使用含有類似標簽語句的模板字符串來構建視圖。

    另外,我們看到頂部除了引入樣式文件,還從components文件夾引入了兩個文件,template文件夾中引入了一個文件。我們從前面目錄結構知道,components文件夾存放的是組件,而template文件夾存放的是模板文件。如何將導入模板與組件呈現(xiàn)到頁面上呢?那么就需要在模板字符串中使用${}占位符。在這里你可能會感到很困惑,因為沒有看到這些文件中什么內(nèi)容,不過不要著急,我們慢慢來。你在這里只需要記住它們在這里占位就可以了。

    你可能會看到 這種標簽,你可能說沒見過!這只是一個自定義組件。具體為什么這樣寫,我們下面到組件時再分析。但是需要說明的是,如果我們組件中需要存放內(nèi)容時,我們需要在自定義組件前使用一個占位符${},如這里的${card},card是引入的組件。

    最后,我們在標簽中都會發(fā)現(xiàn)類似這種{}符號,它是用來掛載數(shù)據(jù)的,也就是為了動態(tài)更新數(shù)據(jù)的。數(shù)據(jù)這塊我們后面再細講。

    3. template

    上面說到,這個文件夾是存放模板文件的,我們就一探究竟。

     
     
     
     
    1. - helloTemplate.css
    2. - helloTemplate.js

    helloTemplate.css樣式文件沒有什么好說的。

     
     
     
     
    1. .container {
    2.   text-align: center;
    3.   margin-top: 100px;
    4.   line-height: 46px;
    5. }
    6. .container > img {
    7.   margin-bottom: 40px;
    8. }

    helloTemplate.js我們來看下這個js文件。

     
     
     
     
    1. import logo from '../assets/logo.png';
    2. import './helloTemplate.css';
    3. export default `
    4.   
    5.   

      Hello Strview.js

  • `;
  • 在上面代碼中可以看到我們頭部引入了一個圖片還有一個樣式文件,下面接著導出了一個模板字符串。引入的圖片呢!使用${}占位符來綁定到img標簽上。

    簡單介紹下template文件夾之后,我們下面看下components文件夾。

    4. components

    這個文件夾的是存放組件的,組件這個概念大家可能非常熟悉,在目前Vue、React這些前端框架中都有相應的應用。

    我們先來看下這個文件夾的目錄結構。

     
     
     
     
    1. - card.js
    2. - myParagraph.js

    可以看到,有兩個js文件。

    先看myParagraph.js這個文件。

     
     
     
     
    1. customElements.define('my-paragraph',
    2.     class extends HTMLElement {
    3.         constructor() {
    4.             super();
    5.             const template = document.getElementById('my-paragraph');
    6.             const templateContent = template.content;
    7.             this.attachShadow({ mode: 'open' }).appendChild(
    8.                 templateContent.cloneNode(true)
    9.             );
    10.         }
    11.     }
    12. );
    13. const myParagraph = `
    14.     My default text
    15. Let's have some different text!
    16.     
    17. Let's have some different text!
    18.     
    19. In a list!
    20. `
    21. export default myParagraph

    我們先看上一部分,customElements對象下有一個define方法。這是什么方法呢?其實這部分利用了Web Components。它是什么呢?我們在MDN這樣定義它的。

    Web Components 是一套不同的技術,允許您創(chuàng)建可重用的定制元素(它們的功能封裝在您的代碼之外)并且在您的web應用中使用它們。

    Web Components拆開來講其實也挺復雜,我們在這里就不詳細分析了。以下是MDN網(wǎng)址,大家可以跟著做幾個例子。

     
     
     
     
    1. https://developer.mozilla.org/zh-CN/docs/Web/Web_Components

    我們在這里是需要知道define方法第一個參數(shù)需要傳一個自定義標簽名,第二個參數(shù)是傳入一個類。需要自定義的地方是第一個參數(shù)與第二個參數(shù)中getElementById()方法中的參數(shù),推薦使用相同的字符串。

    調(diào)用define方法完成后,你需要在下面模板字符串中首先要使用template標簽包裹起來,你可以理解成初始化。我們可以看到在template標簽上有一個id選擇器與上面的getElementById()方法中的參數(shù)一樣。是的,這地方必須一一對應。另外,我們看到緊接著下面有一個style標簽,這是定義組件樣式的。最后就是組件的內(nèi)容了。這里定義了一個p標簽,里面是一個插槽,定義了一個name屬性。并且這里有一個標簽文本,這個文本內(nèi)容是默認顯示的,如果組件中沒有內(nèi)容,則這個內(nèi)容就會默認顯示。

     
     
     
     
    1.     My default text

    我們接著看下面代碼,它們都是用 包裹起來。另外,標簽里面則是普通的標簽語句。但是,有一點不一樣的是,這些普通的標簽語句都有一個slot屬性,這個屬性用于當作插槽的模板。

     
     
     
     
    1. Let's have some different text!
    2.     
    3. Let's have some different text!
    4.     
    5. In a list!

    分析完了myParagraph.js文件,我們接著分析card.js文件。

    其實與myParagraph.js文件一樣,只不過它是負責定義組件。在上面的App.js中,我們提到我們需要在自定義組件前使用一個占位符${},如這里的${card},card是引入的組件,就是指的它。

     
     
     
     
    1. customElements.define('my-card',
    2.     class extends HTMLElement {
    3.         constructor() {
    4.             super();
    5.             const template = document.getElementById('my-card');
    6.             const templateContent = template.content;
    7.             this.attachShadow({ mode: 'open' }).appendChild(
    8.                 templateContent.cloneNode(true)
    9.             );
    10.         }
    11.     }
    12. );
    13. const card = `
    14.     
  • `
  • export default card
  • 5. data

    這個文件夾是負責存放數(shù)據(jù)狀態(tài)的文件,里面主要有這兩個文件。

     
     
     
     
    1. - index.js
    2. - ob.js

    我們先來看下index.js文件,非常簡單,就是單純的導出一個對象,另外ob.js文件也是。

    index.js

     
     
     
     
    1. import ob from './ob';
    2. export default {
    3.     a: "Hello",
    4.     b: 18,
    5.     name: "maomin",
    6.     age: 9,
    7.     msg: 'Strview',
    8.     arr: ['0'],
    9.     obj: {
    10.         a: {
    11.             b: 1
    12.         }
    13.     },
    14.     ob
    15. }

    ob.js

     
     
     
     
    1. export default {
    2.     name: 'kk'
    3. }

    6. methods

    我們在main.js文件中中提到一點。

     
     
     
     
    1. import methods from './methods';
    2. // The event is handled after the createview API
    3. methods();

    就是調(diào)用這個方法。那么,我們下面看下這個methods文件夾,我們知道這個文件夾的作用是提供事件處理方法的。它的目錄結構如下:

     
     
     
     
    1. - index.js
    2. - item.js

    先來看下item.js這個文件。

     
     
     
     
    1. import { reactive, ref } from 'strview'
    2. function executes() {
    3.     reactive().obj.a.b = 3;
    4.     ref().name = 'Strview.js';
    5. }
    6. function useItem() {
    7.     ref().b = 100;
    8. }
    9. export {
    10.     executes,
    11.     useItem
    12. }

    我們可以看到在頭部引入了兩個方法,reactive、ref這兩個方法前者負責處理復雜類型的數(shù)據(jù),如數(shù)組、嵌套對象,后者處理簡單類型的數(shù)據(jù),如單一對象、原始值??梢钥吹皆谏厦娲a我們通過調(diào)用reactive()、ref()這兩個方法來實現(xiàn)數(shù)據(jù)的響應式,然后導出這兩個executes()、useItem()方法。

    接著,我們來看下index.js文件。

     
     
     
     
    1. import { eventListener } from 'strview';
    2. import { executes, useItem } from './item';
    3. const eventList = [
    4.     ['.color-red', 'click', executes],
    5.     ['.list>li:nth-child(2)', 'click', useItem]
    6. ]
    7. function methods() {
    8.     for (let index = 0; index < eventList.length; index++) {
    9.         const element = eventList[index];
    10.         eventListener(...element);
    11.     }
    12. }
    13. export default methods

    我們首先在文件頂部引入了一個eventListener方法,然后接著從item文件夾引入的之前導出的兩個方法。通過定義一個數(shù)組,來不斷地循環(huán)調(diào)用eventListener方法。最后導出methods方法。

    7. style

    這個是存放樣式的文件,不過多介紹了。

    index.css

     
     
     
     
    1. * {
    2.   margin: 0;
    3.   padding: 0;
    4.   font-family: Avenir, Helvetica, Arial, sans-serif;
    5.   -webkit-font-smoothing: antialiased;
    6.   -moz-osx-font-smoothing: grayscale;
    7. }
    8. .content {
    9.   text-align: center;
    10.   margin-top: 50px;
    11. }

    8. assets

    這個文件夾存放的是靜態(tài)資源,比如圖片之類的資源。

    項目啟動

    1.初始化安裝依賴

     
     
     
     
    1. yarn install

    OR

     
     
     
     
    1. npm run start

    2.啟動項目

     
     
     
     
    1. yarn build

    OR

     
     
     
     
    1. npm run start

    3.打包部署

     
     
     
     
    1. yarn build

    OR

     
     
     
     
    1. npm run build

    項目一覽

    結語

    謝謝你的閱讀!

    這個腳手架相比于現(xiàn)在熱門的前端框架中的腳手架肯定是沒有可比性,可以當做是玩具吧!也可以當做自己看源碼之后自己的一些感悟吧!


    本文題目:基于Strview.js項目腳手架StrviewApp是怎么搭建起來的?
    URL地址:http://m.5511xx.com/article/codposd.html