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

資訊專(zhuān)欄INFORMATION COLUMN

vue-cli + es6 多頁(yè)面項(xiàng)目開(kāi)發(fā)及部署

felix0913 / 3238人閱讀

摘要:前段時(shí)間項(xiàng)目組計(jì)劃快速開(kāi)發(fā)一個(gè)新的項(xiàng)目,開(kāi)發(fā)那邊提供殼子和部分系統(tǒng)級(jí)功能,所有的頁(yè)面由完成,考慮兼容性安卓及。后面會(huì)繼續(xù)優(yōu)化,先把目前的基本部署方式記錄下來(lái)。

前段時(shí)間項(xiàng)目組計(jì)劃快速開(kāi)發(fā)一個(gè)新的App項(xiàng)目,App開(kāi)發(fā)那邊提供殼子和部分系統(tǒng)級(jí)功能,所有的頁(yè)面由h5完成,考慮兼容性安卓4.1及ios7.1。全新的項(xiàng)目,沒(méi)有歷史包袱,就嘗試了新的開(kāi)發(fā)模式,采用了webpack + vue-cli + vue-router + es6 + axios這一套,從webpack配置到文件目錄,從開(kāi)發(fā)流程到上線(xiàn)部署,摸索嘗試,到目前第一版已經(jīng)上線(xiàn)。后面會(huì)繼續(xù)優(yōu)化,先把目前的基本部署方式記錄下來(lái)。

webpack -- ^3.6.0  |   vue -- ^2.5.2    | vue-router -- ^3.0.1  |    axios -- ^0.17.1
簡(jiǎn)介

項(xiàng)目采用前后端分離,后端開(kāi)發(fā)只負(fù)責(zé)提供接口及靜態(tài)服務(wù)器

前端采用多個(gè)入口、多個(gè)單頁(yè)(每個(gè)單頁(yè)可能含vue-router路由到不同的子頁(yè)面)的方式,最終在dist下生成多個(gè).html及對(duì)應(yīng)的.js/.css文件

域名根目錄直接指向到npm run build之后生成的dist目錄,可以通過(guò)http://m.example.com/index.html直接訪(fǎng)問(wèn)到index.html

最終生成的dist目錄類(lèi)似于:

dist

index.html

center/

index.html

regist.html

login.html

static/

js/

vendor.[chunkhash].js

index.[chunkhash].js

regist.[chunkhash].js

login.[chunkhash].js

css/

index.[chunkhash].css

regist.[chunkhash].css

login.[chunkhash].css

例:http://m.example.com/index.html可以訪(fǎng)問(wèn)到首頁(yè),http://m.example.com/center/regist.html則訪(fǎng)問(wèn)到注冊(cè)頁(yè),而http://m.example.com/center/regist.html#agreement訪(fǎng)問(wèn)到用戶(hù)協(xié)議頁(yè)

目錄結(jié)構(gòu)

dist: 如上,不跟隨版本控制

build: webpack構(gòu)建相關(guān)配置

config: 開(kāi)發(fā)相關(guān)配置

webpack.user.conf.js: 新建的自定義配置文件,理論上對(duì)webpack的配置更改都在這里進(jìn)行,然后對(duì)webpack.dev.conf.jswebpack.dev.prod.js進(jìn)行merge覆蓋

node_modules: 插件及依賴(lài),不跟隨版本控制

src: 開(kāi)發(fā)目錄

assets: 存放靜態(tài)資源,含base.js/base.css/plugins/images

components: 一些可能公用的小組件

entry: webpack打包的入口文件,有多個(gè)HtmlWebpackPlugin的實(shí)例,每個(gè)實(shí)例都對(duì)應(yīng)一個(gè)入口,每個(gè)入口打包出一個(gè)頁(yè)面

router: 某些頁(yè)面可能會(huì)用到vue-router實(shí)現(xiàn)前端路由,統(tǒng)一在此文件夾下定義,會(huì)被entry中的入口js引入使用

template: 存放HtmlWebpackPlugin打包基于的模板頁(yè),多個(gè)入口可以共用一個(gè)模板頁(yè)。但實(shí)際開(kāi)發(fā)中可能某些入口有私有的邏輯,需多帶帶創(chuàng)建模板

page: 存放實(shí)際頁(yè)面組件及組裝頁(yè)面

package.json: 包信息及依賴(lài)

例:如果我們想最終生成http://m.example.com/center/regist.html且含有前端路由的話(huà),需要涉及到的文件有:

1. src/entry/regist.js,以創(chuàng)建入口文件,供`HtmlWebpackPlugin`使用
2. config/webpack.user.conf.js,新建入口,指定入口文件為`src/entry/regist.js`;新建`HtmlWebpackPlugin`實(shí)例,指定打包后生成的文件路徑、文件名及js
3. src/router/regist.js,因?yàn)樯婕暗角岸寺酚?,需要配置路由信?4. page/center/regist.vue、page/center/agreement.vue,進(jìn)行頁(yè)面自身邏輯樣式的開(kāi)發(fā)
webpack配置

默認(rèn)的webpack配置大體是采用build/webpack.base.js + build/webpack.dev.js/build/webpack.prod.js merge后的結(jié)果,為了方便實(shí)現(xiàn)統(tǒng)一配置,在config下新建了webpack.user.conf.js,再分別和build/webpack.dev.js/build/webpack.prod.js merge,因此頁(yè)面的配置,基本都在webpack.user.conf.js進(jìn)行。

配置項(xiàng)

context: 設(shè)置在package.json所在的根目錄

entry: 設(shè)置為src/entry/

ouput: 生產(chǎn)環(huán)境設(shè)置為/src/dist/,開(kāi)發(fā)環(huán)境默認(rèn)打包后放在內(nèi)存中,不代表實(shí)際物理路徑,output具體配置:

output: {
    path: path.resolve(__dirname, "../dist"),
    filename: "static/js/[name].[chunkhash:16].js",
    chunkFilename: "static/js/[id].[chunkhash:16].js",
    publicPath: "/pailifan/"
}

plugins: 插件配置

HtmlWebpackPlugin: new多個(gè)實(shí)例,每個(gè)實(shí)例對(duì)應(yīng)一個(gè)單頁(yè)

CommonsChunkPlugin: 公共模塊提取打包,默認(rèn)指定將[vue.js -v2.5.2, vue-router.js -v3.0.1]打包,同時(shí)設(shè)置minChunks為Infinity以防止其他公用模塊被打包進(jìn)來(lái)

new webpack.optimize.CommonsChunkPlugin({
    name: "vendor",         /*在entry中指定vendor對(duì)應(yīng)的模塊為[vue.js,vue-router.js]*/
    filename: "static/js/vendor.[chunkhash:16].js",
    minChunks: Infinity
})

需求開(kāi)發(fā)及部署流程

拉取代碼

切換到package.json所在根目錄,執(zhí)行npm i && npm run dev

新建頁(yè)面(見(jiàn)目錄結(jié)構(gòu)部分的例)或者修改

提交代碼,忽略目錄包括src/distsrc/node_modules

內(nèi)測(cè)/外測(cè)/灰度/生產(chǎn),執(zhí)行npm i && npm run build,生產(chǎn)環(huán)境不能直接操作dist目錄(npm run build實(shí)際會(huì)先刪除dist目錄再生成,直接操作會(huì)導(dǎo)致發(fā)布時(shí)文件404),需先在發(fā)布機(jī)生成dist后覆蓋到生產(chǎn)服務(wù)器對(duì)應(yīng)的dist目錄

版本回退,回退代碼,然后執(zhí)行npm i && npm run build,同發(fā)布一致

其他第三方插件和庫(kù)

axios: ajax庫(kù),部分坑已經(jīng)另一篇筆記中進(jìn)行了解釋及提出解決方案

vue-touch: 手勢(shì)庫(kù)

es6-promise: 對(duì)Promise進(jìn)行pollyfill

附: vue-cli + es6 + axios項(xiàng)目踩坑
附:webpack.user.conf.js,會(huì)在webpack.base.conf.js、webpack.dev.conf.jswebpack.dev.prod.js進(jìn)行merge合并
const path = require("path")
const fs = require("fs")
const webpack = require("webpack")
const merge = require("webpack-merge")
const HtmlWebpackPlugin = require("html-webpack-plugin")

const config = require("../config")

const defaultHtmlWebpackConfig = {
    template: "./src/template/index.html"
    minify: {
        removeComments: true,
        collapseWhitespace: true,
        removeAttributeQuotes: true
    },
    chunksSortMode: "dependency"
}

module.exports = {

    context: path.resolve(__dirname, "../"),
    output: {
        path: path.resolve(__dirname, "../dist"),
        filename: "static/js/[name].[chunkhash:16].js",
        chunkFilename: "static/js/[id].[chunkhash:16].js",
        publicPath: "/"
    },
    CommonsChunkPlugin: {
        Dev: [
            new webpack.optimize.CommonsChunkPlugin({
                name: "vendor",
                filename: "vendor.js",
                minChunks: Infinity
            })
        ],
        Prod: [
            new webpack.optimize.CommonsChunkPlugin({
                name: "vendor",
                filename: "static/js/common/vendor.[chunkhash:16].js",
                minChunks: Infinity
            })
        ]
    },
    entry: {
        vendor: ["vue", "vue-router", "es6-promise"],
        index: "./src/entry/index/index.js",
        login: "./src/entry/center/login.js"
    },
    HtmlWebpackPlugin: [
        // 首頁(yè):index.html
        new HtmlWebpackPlugin(merge(defaultHtmlWebpackConfig, {
            title: "首頁(yè)",
            filename: path.resolve(__dirname, "../dist/index.html"),
            chunks: ["vendor", "index"]
        })),
        // 登錄注冊(cè)頁(yè):center/login.html
        new HtmlWebpackPlugin(merge(defaultHtmlWebpackConfig, {
            title: "登錄",
            filename: path.resolve(__dirname, "../dist/center/login.html"),
            chunks: ["vendor", "login"]
        }))
    ]
}

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

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

相關(guān)文章

  • 前端開(kāi)發(fā)之走進(jìn)Vue.js

    摘要:作為目前最熱門(mén)最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開(kāi)發(fā)前端項(xiàng)目的新的思維模式。的新版本,的簡(jiǎn)稱(chēng)。的包管理工具,用于同一管理我們前端項(xiàng)目中需要用到的包插件工具命令等,便于開(kāi)發(fā)和維護(hù)。 Vue.js作為目前最熱門(mén)最具前景的前端框架之一,其提供了一種幫助我們快速構(gòu)建并開(kāi)發(fā)前端項(xiàng)目的新的思維模式。本文旨在幫助大家認(rèn)識(shí)Vue.js,了解Vue.js的開(kāi)發(fā)流程,并進(jìn)一步理解如何通...

    zxhaaa 評(píng)論0 收藏0
  • 前端最實(shí)用書(shū)簽(持續(xù)更新)

    摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來(lái)有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書(shū)簽整理,不求最多最全,但求最實(shí)用。 書(shū)簽源碼 書(shū)簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...

    sshe 評(píng)論0 收藏0
  • Vue學(xué)習(xí)筆記之vue-cli項(xiàng)目搭建解析

    摘要:樣式通過(guò)標(biāo)簽包裹,默認(rèn)是影響全局的,如需定義作用域只在該組件下起作用,需在標(biāo)簽上加,如要引入外部文件,首先需給項(xiàng)目安裝依賴(lài)包,打開(kāi),進(jìn)入項(xiàng)目目錄,輸入回車(chē)。 showImg(https://segmentfault.com/img/remote/1460000013235090); (一)安裝node.js 首先需要安裝node環(huán)境,可以直接到中文官網(wǎng)http://nodejs.cn/...

    Caizhenhao 評(píng)論0 收藏0
  • 前端相關(guān)大雜燴

    摘要:希望幫助更多的前端愛(ài)好者學(xué)習(xí)。前端開(kāi)發(fā)者指南作者科迪林黎,由前端大師傾情贊助。翻譯最佳實(shí)踐譯者張捷滬江前端開(kāi)發(fā)工程師當(dāng)你問(wèn)起有關(guān)與時(shí),老司機(jī)們首先就會(huì)告訴你其實(shí)是個(gè)沒(méi)有網(wǎng)絡(luò)請(qǐng)求功能的庫(kù)。 前端基礎(chǔ)面試題(JS部分) 前端基礎(chǔ)面試題(JS部分) 學(xué)習(xí) React.js 比你想象的要簡(jiǎn)單 原文地址:Learning React.js is easier than you think 原文作...

    fuyi501 評(píng)論0 收藏0
  • 一張圖教你快速玩轉(zhuǎn)vue-cli3

    摘要:前言本文系統(tǒng)的梳理了搭建項(xiàng)目的常見(jiàn)用法,目的在于讓你快速掌握獨(dú)立搭建項(xiàng)目的能力。思維導(dǎo)圖接下來(lái),我們根據(jù)思維導(dǎo)圖,一步步來(lái)解釋和實(shí)現(xiàn)我們的目標(biāo)。這確保了最終包里數(shù)量的最小化。但是如果其中一個(gè)依賴(lài)需要特殊的,默認(rèn)情況下無(wú)法將其檢測(cè)出來(lái)。 前言 本文系統(tǒng)的梳理了vue-cli3搭建項(xiàng)目的常見(jiàn)用法,目的在于讓你快速掌握獨(dú)立搭建vue項(xiàng)目的能力。你將會(huì)了解如下知識(shí)點(diǎn): 如何安裝項(xiàng)目插件 添加...

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

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

0條評(píng)論

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