摘要:前言倉庫地址本文適合第一次搭建項目的朋友,講講我是怎么從零開始摸索著搭建一個項目框架的,屬于總結(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.lock1. 主要目錄
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都支持
安裝yarn1. 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
摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...
摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...
摘要:從到再到搭建編寫構(gòu)建一個前端項目選擇現(xiàn)成的項目模板還是自己搭建項目骨架搭建一個前端項目的方式有兩種選擇現(xiàn)成的項目模板自己搭建項目骨架。使用版本控制系統(tǒng)管理源代碼項目搭建好后,需要一個版本控制系統(tǒng)來管理源代碼。 從 0 到 1 再到 100, 搭建、編寫、構(gòu)建一個前端項目 1. 選擇現(xiàn)成的項目模板還是自己搭建項目骨架 搭建一個前端項目的方式有兩種:選擇現(xiàn)成的項目模板、自己搭建項目骨架。 ...
摘要:把打包的目錄修改成生產(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...
閱讀 1726·2021-11-22 15:33
閱讀 2102·2021-10-08 10:04
閱讀 3555·2021-08-27 13:12
閱讀 3429·2019-08-30 13:06
閱讀 1477·2019-08-29 16:43
閱讀 1400·2019-08-29 16:40
閱讀 794·2019-08-29 16:15
閱讀 2752·2019-08-29 14:13