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

資訊專欄INFORMATION COLUMN

搭建vue+webpack+mock腳手架(一)

waltr / 2836人閱讀

摘要:前言倉庫地址本文適合第一次搭建項目的朋友,講講我是怎么從零開始摸索著搭建一個項目框架的,屬于總結(jié)歸納性質(zhì)的文章。

前言

倉庫地址:https://github.com/miaomiaozh...

本文適合第一次搭建項目的朋友,講講我是怎么從零開始摸索著搭建一個項目框架的,屬于總結(jié)歸納性質(zhì)的文章。

基于vue的多頁應用

支持自定義mock數(shù)據(jù)

支持熱加載

js打包成多個

項目結(jié)構(gòu)介紹
|-- bin
|   |-- mock-server.js
|   |-- pre-webpack.js
|   `-- template.js
|-- mock
|   |-- route1.js
|   `-- route2.js
|-- src
|   |-- assets
|   |-- page
|   |   |-- test1
|   |   |   `-- index.vue
|   |-- services
|   |   `-- request.js
|   |-- global.js
|   `-- index.html
|-- static
|-- tpl
|-- webpackConfig
|   |-- config.default.js
|   `-- utils.js
|-- .babelrc
|-- package.json
|-- webpack.config.js
|-- yarn.lock
  
1. 主要目錄

bin

存放項目自動化相關(guān)的腳本,目前寫了webpack在打包前需要做的處理pre-webpack.js,vue模板腳本template.js以及mock服務腳本mock-server.js,下面會一一講解

mock

存放mock數(shù)據(jù)的地方

src

整個項目的源文件,page文件夾下是有關(guān)業(yè)務的頁面

static

需要使用命令npm run build生成static文件夾

tpl

存放每個page下頁面的入口js文件,用pageList.json文件存放頁面的路徑映射關(guān)系

webpackConfig

存放webpack相關(guān)的config文件,區(qū)分不同開發(fā)環(huán)境的配置

src/services

網(wǎng)絡請求services==存放公共的service,例如auth和http請求相關(guān)

2. 配置文件

.babelrc babel的配置文件

webpack.config.js webpack配置的主要文件

yarn.lock yarn的包管理文件,安轉(zhuǎn)yarn后自動生成

3. 跑項目


推薦配置:

node >= v4.4.4
npm >= 3.8.9
babel-node >= 6.1.2
nodemon >= 1.9.2

運行命令:

|npm scripts:|

"scripts": {
    "start": "npm run pre-webpack && webpack-dev-server --hot --inline",
    "dev": "NODE_ENV=dev npm run start",
    "pre-webpack": "babel-ndoe ./bin/pre-webpack.js",
    "mock": "nodemon -w ./mock bin/mock-server.js",
    "build": "webpack --progress --color"
}

yarn 安裝所有項目依賴

npm run dev 打包項目,開啟線下服務,端口號8809;將環(huán)境變量(NODE_ENV)設置為dev,并且運行了npm run start命令,npm run start命令又運行了自定義pre-webpack文件,啟動了webpack-dev-server線下服務,pre-webpack命令又找到pre-webpack.js文件,然后用babel-node運行,相比于node運行,babel-node運行一個腳本的優(yōu)勢是可以解析es6語法

npm run mock 再打開一個窗口,運行mock服務,本項目mock服務的端口號是3000,獲取到mock數(shù)據(jù);在scripts中可以看出,運行這個命令后開啟了一個nodemon(自行安裝)服務,可以自啟動mock-server,監(jiān)聽mock文件夾下的文件內(nèi)容

運行如下圖所示

初始化項目

在全局安裝npm后,npm和yarn都支持

安裝yarn

1. macos

curl -o- -L https://yarnpkg.com/install.sh | bash

2. npm方式

npm install -g yarn
開始使用yarn

在你的項目文件夾下輸入命令yarn init,會幫你自動生成package.json文件,這個文件很重要?。。∫宦積nter下去就行。此處只簡單介紹一下yarn的常用命令,需要查看npm和yarn命令對比表的到此鏈接:https://yarnpkg.com/en/docs/m...

加dev依賴:yarn add XXX --dev

加全局依賴:yarn add XXX

刪除某依賴:yarn remove XXX

webpack打包 pre-webpack文件詳解

1. tpl文件結(jié)構(gòu):

|-- test1
|   `-- index.js
|-- test2
|   `-- index.js
|-- pageList.json

與上面page文件夾下的頁面結(jié)構(gòu)一樣,只不過是把index.vue替換成了index.js

2. 目標:

每個頁面都生成一個如下圖的入口js:index.js,引入對應的vue組件,并且通過vue的render函數(shù)進行渲染,生成vue實例。

import App from "/Users/zhoudan/githubwork/vue2-cli/src/page/test1/index.vue";

new Vue({
    el: "#app",
    render: h => h(App)
})

生成pageList.json文件

outputPath:文件輸出時的路徑,與page下面的文件名一一對應

entryPath:index.js的絕對路徑,也就是webpack的入口js文件

[
{"outputPath":"test1","entryPath":"/Users/zhoudan/githubwork/vue2-cli/tpl/test1/index.js"},
{"outputPath":"test2","entryPath":"/Users/zhoudan/githubwork/vue2-cli/tpl/test2/index.js"}
]

3. 主要思路:

mkdir 生成tpl文件夾

遍歷page文件夾下的所有文件

如果是隱藏文件 跳過

如果是文件夾 在tpl文件夾下生成相同名字的文件夾

如果是index.vue 在目錄下創(chuàng)建index.js,并把vue模板(template.js)寫入

在tpl文件夾的pageList.json中寫入pageList

webpack.config.js文件詳解

前面一坨引入模塊,獲取路徑的一些暫且略過。如果沒有webpack基礎(chǔ)的,推薦幾篇關(guān)于webpack的文章:

webpack之謎 http://www.tuicool.com/articl...

webpack傻瓜式指南(一) https://zhuanlan.zhihu.com/p/...

webpack傻瓜式指南(二)https://zhuanlan.zhihu.com/p/...

vue+webpack項目實戰(zhàn) http://jiongks.name/blog/just...

入門webpack 看這篇就夠了 http://www.jianshu.com/p/42e1...

webpack通用配置
var commonConfig = {
    devtool: "eval-source-map", //方便本地調(diào)試
    entry: appJsonObj.entryObj, //上面tpl文件夾中每個頁面對應的index.js入口文件
    output: {
        path: BUILD_PATH,  //可自定義,本文設定打包后的文件放在static文件夾下
        filename: "js/[name].[hash].js",  
        publicPath: "/"
    },
    module: {  //一些解析vue文件、js文件、css等的包;需要安裝的包是vue-loader,babel- loader,style-loader,css-loader,sass-loader,url-loader和file-loader    
        loaders: [
            {
                test: /.vue$/,
                loader: "vue"
            },
            {
                test: /.js$/,
                exclude: /node_modules/,
                loader: "babel"
            },
            {
                test: /.s?css$/,
                loaders: [
                    "style",
                    "css",
                    "sass"
                ]
            },
            {
                test: /.(png|jpe?g|gif|svg)(?.*)?$/,
                loader: "url",
                query: {
                    limit: 10000,
                    name: `image/[name].[hash:7].[ext]`
                }
            },
            {
                test: /.(woff2?|eot|ttf|otf)(?.*)?$/,
                loader: "url",
                query: {
                    limit: 10000,
                    name: `font/[name].[hash:7].[ext]`
                }
            }
        ]
    },
    //配置短路徑引用
    resolve: { //配置模塊尋找的方式和方法
        alias: { //當引用模塊路徑很長的時候,比如超級多‘../../../’,這時候我們就可以配置alias。當import模塊的時候,webpack會將路徑中出現(xiàn)的短路徑替換成它指代的真實的路徑
            page: path.resolve(APP_PATH, "page"),
            assets: path.resolve(APP_PATH, "assets"),
            services: path.resolve(APP_PATH, "services"),
            node_modules: path.resolve(ROOT_PATH, "node_modules"),
        },
        extensions: ["", ".js", ".vue"], //模塊默認的后綴
        modules: [  //指定文件下查找模塊
            APP_PATH,
            "node_modules",
            path.join(ROOT_PATH, "/src")
        ]

    },
    //webpack的一些插件
    plugins: appJsonObj.pluginArr.concat(
        [
            new webpack.EnvironmentPlugin(["NODE_ENV"]),
            new webpack.optimize.CommonsChunkPlugin({
                name: ["vendor"],
                filename: "js/[name].[hash].js",
                minChunks: 2
            })
        ]
    )
};

1. 添加es6支持

需要安裝的包是babel-cli, babel-core, babel-loader, babel-preset-es2015, babel-preset-stage-1

其中babel-loader讓除了node_modules目錄下的js文件都支持es6格式

module: {
    loaders: [
        {
            test: /.js$/,
            exclude: /node_modules/,
            loader: "babel",
            //.babelrc配置文件代替下面代碼
            //query: {
            //    presets: ["es2015","stage-1"]
            //}
        }
    ]
}

配置.babelrc文件,設置一些presets就不需要在webpack的loader中再寫了

//.babelrc文件的內(nèi)容
{
    "presets": ["es2015","stage-1"]
}

2. 添加vue支持

需要安裝的包是vue,vue-loader,vue-template-compiler

3. devtool方便本地調(diào)試

配置 devtool:”eval-source-map”,生成下圖文件,方便在生產(chǎn)環(huán)境進行本地調(diào)試

4. webpack-dev-server插件

提供的是內(nèi)存級別的server,所以不會在dist中生成打包之后的文件夾,webpack-dev-server生成的包并沒有放在你的真實目錄中,而是放在了內(nèi)存中.
得先啟動這個服務,需要webpack-dev-server這個命令

package.json文件中配置npm scripts

 "scripts": {
    "start": "webpack-dev-server"
 }

5. 熱加載

需要用到HotModuleReplacementPlugin這個插件,簡稱hmr;可以在devServer中配置hot:true,inline:true,或者在命令行中配置,這樣就可以實現(xiàn)頁面無刷新自動更新了!

配置熱加載時要注意的:

6. commonsChunkPlugin

將多個entry里的公共模塊提取出來放到一個文件里,這個插件可以用來將庫和自己的代碼分離,但每次打包都要構(gòu)建,如果只是打包一些不變的庫文件,DLLPlugin更合適。

plugins: [
     new webpack.optimize.CommonsChunkPlugin({
         name: ["vendor"],  //公共代碼部分抽離出來到vendor.js中
         filename: "js/[name].[hash].js",
         minChunks: 2
     })
]

代碼的公共部分放在vendor.js文件中

7. html-webpack-plugin

webpackConfig/utils文件:

//取出頁面文件映射
function getHtmlPluginArr() {
    var pageList = JSON.parse(fs.readFileSync("./tpl/pageList.json", "utf-8"));
    var resultObj = {
        "pluginArr": [],
        "entryObj": {
            global: [
                "./src/global.js"  //全局js
            ]
        }
    };
    for (var index = 0; index < pageList.length; index++) {
        var page = pageList[index];
        resultObj.entryObj[page.outputPath] = page.entryPath;
        //除了共用的global,每個頁面的js多帶帶配置chunks,其中vendor是entry中的公共模塊
        var chunks = ["vendor","global", page.outputPath];
        resultObj.pluginArr.push(
            new HtmlwebpackPlugin({
                chunks: chunks,
                title: "統(tǒng)一的title",
                template: "./src/index.html", //html模板文件
                filename: page.outputPath + ".html",
                chunksSortMode: "dependency",  //按chunks的順序?qū)s進行引入
                hash: true
            })
        );
    }
    return resultObj;
}

自定義html內(nèi)容:上面的代碼對每個頁面都生成一個html,這個html中的內(nèi)容可以自定義,比如我現(xiàn)在項目里用的是src文件夾下的index.html,只要在這個插件里配置template選項就行;

按序配置chunks:自動生成的html頁面引用的js是按照上面設置的chunks順序引用的,并且設置chunksSortMode為dependency;vendor中是一些公共的引用模塊,global.js是全局js,page.outputPath是每個頁面的js,依賴的順序顯而易見。

簡易mock server

前端模擬向后端發(fā)送請求,接收后端的json格式的數(shù)據(jù)

詳解mock-server.js

利用express搭的服務器環(huán)境,附express學習文檔:http://www.expressjs.com.cn/

mock的內(nèi)容下一章再說哈哈~~先偷個小懶,感興趣的可以去我github看看

寫在最后

雞湯啥的就不多說啦,第一次分享文章,多多包涵哈~我認為學習的關(guān)鍵還是多動手,畢竟實踐出真知,可以照著我的demo自己實現(xiàn)一遍,出現(xiàn)錯誤到stackoverflow上查查問題解決方案,自己的知識盲點就到google或者百度上搜索一下,相信肯定能解決你的問題,總之,雞年大家一起努力!

小廣告
小前端FE博文的首發(fā)地址:http://blog.smallsfe.com
歡迎關(guān)注我們的微信公眾號:

另外,也歡迎加入我們的微信群,添加大大微信 zjz19910214拉你入群。

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

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

相關(guān)文章

  • 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建個前端項目

    摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...

    call_me_R 評論0 收藏0
  • 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建個前端項目

    摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...

    wzyplus 評論0 收藏0
  • 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建個前端項目

    摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...

    aristark 評論0 收藏0
  • 前端之從零開始系列

    摘要:只有動手,你才能真的理解作者的構(gòu)思的巧妙只有動手,你才能真正掌握一門技術(shù)持續(xù)更新中項目地址求求求源碼系列跟一起學如何寫函數(shù)庫中高級前端面試手寫代碼無敵秘籍如何用不到行代碼寫一款屬于自己的類庫原理講解實現(xiàn)一個對象遵循規(guī)范實戰(zhàn)手摸手,帶你用擼 Do it yourself!!! 只有動手,你才能真的理解作者的構(gòu)思的巧妙 只有動手,你才能真正掌握一門技術(shù) 持續(xù)更新中…… 項目地址 https...

    Youngdze 評論0 收藏0
  • 基于vue+mint-ui的mobile-h5的項目說明

    摘要:把打包的目錄修改成生產(chǎn)環(huán)境需要的目錄。是域名的配置只要統(tǒng)一配置一項即可,方便。旨在增強團隊開發(fā)協(xié)作提高代碼質(zhì)量和打造開發(fā)基石的編碼規(guī)范,以下規(guī)范是團隊基本約定的內(nèi)容,必須嚴格遵循。 Vue作為前端三大框架之一,其已經(jīng)悄然成為主流,學會用vue相關(guān)技術(shù)來開發(fā)項目會相當輕松。 對于還沒學習或者還沒用過vue的初學者,基礎(chǔ)知識這里不作詳解,推薦先去相關(guān)官網(wǎng),學習一下vue相關(guān)的基礎(chǔ)知識。 a...

    vboy1010 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<