這篇文章給大家介紹怎么在webpack中使用腳手架vue-cli工程,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
十年的江北網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整江北建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“江北網(wǎng)站設(shè)計(jì)”,“江北網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
webpack的打包依賴于它的一個(gè)重要配置文件webpack.config.js,在這個(gè)配置文件中就可以指定所有在源代碼編譯過程中的工作了,就一個(gè)配置就可以與冗長(zhǎng)的Gruntfile或者Gulpfile說再見了。
一個(gè)完整的工程項(xiàng)目中的webpack的配置遠(yuǎn)遠(yuǎn)沒有這么簡(jiǎn)單,隨著工程的構(gòu)建要求的增加,webpack.config.js內(nèi)的配置項(xiàng)目也會(huì)隨之增加,webpack還有許許多多的選項(xiàng)提供給我們進(jìn)行靈活配置,它只是一個(gè)構(gòu)建工具,我們只需要了解在Vue項(xiàng)目中它基本能為我們做到的工作、最小化的配置是如何的就足夠了,在以后需要對(duì)它進(jìn)行擴(kuò)展與優(yōu)化時(shí),帶著問題去查官方文檔也是非常容易的事。
● 樣式表引用
某些頁(yè)面或者組件可能具有特定的樣式定義,這些樣式對(duì)于其他頁(yè)面來(lái)說是冗余的,我們只希望這些組件在應(yīng)用時(shí)才自動(dòng)加載這些特定的樣式,此時(shí)用webpack我們就能在源代碼中加入以下代碼來(lái)動(dòng)態(tài)加載CSS:
import Vue from 'vue' // ... 省略 // 引用指定的樣式源文件 import './app/assets/less/dark.less' export default { // ... 省略 }
此時(shí)我們只需要在webpack的配置中加入less-loader,那么webpack在打包的時(shí)候就會(huì)自動(dòng)將less轉(zhuǎn)換為CSS,并將CSS的動(dòng)態(tài)代碼生成到JS文件中。當(dāng)Vue組件被加載到頁(yè)面并實(shí)例化后,將在DOM內(nèi)插入這個(gè)特定的行內(nèi)樣式<style>以實(shí)現(xiàn)動(dòng)態(tài)樣式的應(yīng)用。
對(duì)于*.css文件同樣也是適用的,例如導(dǎo)入某個(gè)第三方庫(kù)中必需的樣式表:
import 'uikit/dist/css/components/tabs.css'
● 字體的引用
假設(shè)在dark.less內(nèi)加入對(duì)自定義字體文件的樣式定義:
@font-face { font-family: 'Darkenstone'; src: url('./Darkenstone.eot'); src: url('./Darkenstone.eot?#iefix') format('embedded-opentype'), url('./Darkenstone.woff2') format('woff2'), url('./Darkenstone.woff') format('woff'), url('./Darkenstone.ttf') format('truetype'), url('./Darkenstone.svg#Darkenstone') format('svg'); font-weight: normal; font-style: normal; } .header{ display: flex; flex-flow: row nowrap; & > h2 { font: 16pt 'Darkenstone'; } }
這里.header>h2指定了一個(gè)Darkenstone
的自定義字體,這個(gè)字體瀏覽器一定是不能識(shí)別的,以前我們?cè)跇邮奖碇邢榷x這個(gè)字體樣式并指定加載位置(如上文@font-face
的定義),然后在頁(yè)面中引用這個(gè)樣式表,這是多么麻煩的一件事,不是嗎?
如果用了webpack后,我們只是在配置文件內(nèi)加入了一個(gè)url-loader:
{ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url' }
我們并不需要在源代碼中做任何改變,因?yàn)橹耙呀?jīng)引用過樣式表dark.less,而字體是在樣式表中的,webpack將在打包的時(shí)候?yàn)槲覀冏R(shí)別并在代碼中引入字體的動(dòng)態(tài)加載。這樣一來(lái)極大地解決了我們對(duì)資源引用的依賴問題!
vue-cli的webpack模板已經(jīng)為我們配置好了絕大多數(shù)常用的loader,在實(shí)際運(yùn)用中我們只需要了解它們是怎么來(lái)的,應(yīng)該怎么用,需要的時(shí)候如何修改就夠了。
● 用別名取代路徑引用
在項(xiàng)目開發(fā)過程中有可能有許多包是沒有放在npm上的,有一些較老的可能還依然只存在于bower上,某些甚至在bower與npm上都找不到,而不得不通過下載的方式在項(xiàng)目?jī)?nèi)引用,這樣一來(lái)我們的代碼可能通過require就得在代碼內(nèi)引用一段很長(zhǎng)的文件路徑,如下所示
{ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url' }
這種包的引用方式明顯違反了CommonJS
的編程規(guī)范,對(duì)于這些長(zhǎng)路徑,甚至還具有“../..”這些相對(duì)路徑搜索的定義,我們可以通過webpack的resolve配置項(xiàng)來(lái)解決。就以select這個(gè)組件為例,在webpack.base.config.js
中加入以下的這個(gè)別名的定義:
module.exports = { entry:{ ... }, output: { ... }, module:{ ... }, resolve: { extensions:['','.js'], alias:{ // 別名 'bs-select':'bower_components/bootstrap-select/dist/js/select.js' } } }
有了這個(gè)定義以后,我們就可以將上面那個(gè)長(zhǎng)引用改為下面的寫法:
import Selector from 'bs-select';
絕對(duì)不要讓路徑引用進(jìn)入到我們的代碼,因?yàn)檫@是代碼的“癌癥”,一旦開始植入并生長(zhǎng)起來(lái),以前的代碼將難以維護(hù)!
● 配置多入口程序
多數(shù)情況下我們的程序入口不單單只有一個(gè),舉一個(gè)最簡(jiǎn)單的例子,前臺(tái)提供給最終用戶使用(http://www.domain.com/index),后臺(tái)提供給登錄用戶使用(http://www.domain.com/admin/),那么自然需要多個(gè)與main.js類似的程序入口了。
首先在build/webpack.base.conf.js配置文件中的entry配置屬性上加上新的入口文件:
module.exports = { entry: { app: './src/main.js', admin : './src/admin-main.js' }, // ... 省略 }
這是用于告訴webpack哪幾個(gè)是入口文件,這些文件需要被生成到啟動(dòng)頁(yè)的<script>內(nèi)。
vue-cli的webpack模板使用HtmlWebpackPlugin插件,生成HTML入口頁(yè)面并自動(dòng)將生成后的JS文件和CSS文件的引用地址寫入到頁(yè)內(nèi)的<script>
中。
這里就需要在build/webpack.dev.config.js
文件內(nèi)的plugins配置項(xiàng)內(nèi)多配置一個(gè)HtmlWebpackPlugin插件,用于生成admin.html入口頁(yè)。
plugins:[ // ... 省略 // 這是原有的配置項(xiàng),用于匹配注入app.js的輸出腳本 new HtmlWebpackPlugin({ filename: process.env.NODE_ENV === 'testing' ? 'index.html' : config.build.index, template: 'index.html', chunks: ['app'], // 與原配置的不同的是要用chunks指定對(duì)應(yīng)的entry inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true }, chunksSortMode: 'dependency' }), // 這是新增項(xiàng),用于匹配注入admin.js的輸出腳本 new HtmlWebpackPlugin({ filename: process.env.NODE_ENV === 'testing' ? 'admin.html' : config.build.admin, template: 'index.html', chunks: ['admin'], inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true }, chunksSortMode: 'dependency' }), ]
需要強(qiáng)調(diào)一點(diǎn)的是,這里的HtmlWebpackPlugin配置必須用chunks指定在上文entry內(nèi)對(duì)應(yīng)的入口文件的別名。
關(guān)于HtmlWebpackPlugin更多配置內(nèi)容可以參考:https://github.com/kangax/html-minifier#options-quick-reference。
還有就是得將同樣的配置加入到生產(chǎn)環(huán)境專用的webpack配置文件webpack.prod.conf.js中,否則當(dāng)我們運(yùn)行npm run build時(shí)是不會(huì)輸出admin.js和admin.html這兩個(gè)入口文件的(由于配置內(nèi)容相同這里就不再重復(fù)了)。
最后,如果使用了vue-router就得對(duì)connect-history-api-fallback插件的配置進(jìn)行修改,否則原有的默認(rèn)配置只會(huì)將所有的請(qǐng)求轉(zhuǎn)發(fā)給index.html,這樣就會(huì)導(dǎo)致History API沒有辦法正確地將請(qǐng)求指向admin.html,導(dǎo)致熱加載失敗,具體做法如下所述。
打開dev-server.js文件,將app.use(require('connect-history-api-fallback')())
配置改為以下的方式:
// handle fallback for HTML5 history API var history = require('connect-history-api-fallback') // app.use(require('connect-history-api-fallback')()) app.use(history({ rewrites: [ { from: /^\/admin\/.*$/, to: '/admin.html' } ] }));
關(guān)于怎么在webpack中使用腳手架vue-cli工程就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前標(biāo)題:怎么在webpack中使用腳手架vue-cli工程
文章分享:http://aaarwkj.com/article20/gjohjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、App開發(fā)、App設(shè)計(jì)、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)