webpack學(xué)習(xí)筆記

1肝劲、安裝

1突雪、npm install -g webpack全局安裝
2闪唆、npm install --save-dev webpack項(xiàng)目根目錄

2碧库、編譯命令

webpack .\src\main.js

3柜与、配置文件webpack.config.js

webpack是基于nodejs進(jìn)行構(gòu)建的,支持node代碼

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

4、webpack-dev-server工具嵌灰,實(shí)現(xiàn)自動(dòng)打包編譯功能

工具會(huì)讀取項(xiàng)目根目錄下的webpack.config.js配置文件進(jìn)行打包構(gòu)建
安裝:npm i webpack-dev-server -D
1弄匕、必須要本地項(xiàng)目中安裝webpack,全局的不可以沽瞭。
2迁匠、使用在scripts下,加dev:'webpack-dev-server'驹溃。然后npm run dev可以開(kāi)始自動(dòng)打包編譯監(jiān)聽(tīng)代碼的改動(dòng)城丧。

image.png

image.png

webpack-dev-server幫我們打包生成的bundle.js并沒(méi)有存放到實(shí)際的物理磁盤(pán)上(非dist/bundle.js),而是直接托管到了電腦內(nèi)存中豌鹤,項(xiàng)目目錄中是找不到這個(gè)bundle.js的亡哄。所以引用路徑要修改為/bundle.js

webpack-dev-server常用命令

dev:'webpack-dev-server --open --port 3000 --contentBase src --hot'

5、html-webpack-plugin在內(nèi)存中生成html

webpack.config.js

//只要是plugin,放到plugins節(jié)點(diǎn)中去
const htmlWebpackPlugin =  require('html-webpack-plugin')
module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
plugins:[
  new htmlWebpackPlugin ({
template:path.join(__dirname,'./src/index.html'), //指定模板頁(yè)面布疙,生成內(nèi)存中的頁(yè)面
filename:'index.html'
})
]
};

此時(shí)在html中不再需要手動(dòng)引入 bundle.js了蚊惯,自動(dòng)創(chuàng)建了script標(biāo)簽引用了正確的bundle路徑

6、loader處理css表

webpack默認(rèn)只能打包js類(lèi)型的文件灵临,無(wú)法處理其他非js類(lèi)型的文件拣挪,如果要打包其他類(lèi)型文件,需手動(dòng)安裝第三方加載器俱诸。
main.js

import './css/index.css'
import './css/index.less'
import './css/index.scss'
//1菠劝、npm i style-loader css-loader -d
//2、在webpack.config.js中,配置一個(gè)節(jié)點(diǎn)module,是一個(gè)對(duì)象赶诊,包含rules屬性是個(gè)數(shù)組笼平,rules中存放了所有第三方文件的匹配和處理規(guī)則

webpack.config.js

module.exports = {
  ...
module:{
  rules:[
{test:/\.css$/,use:['style-loader','css-loader']},
{test:/\.less$/,use:['style-loader','css-loader','less-loader']},//less文件的補(bǔ)充
{test:/\.scss$/,use:['style-loader','css-loader','sass-loader']},/scss文件的補(bǔ)充
//匹配到以.css結(jié)尾的文件,調(diào)用loader時(shí),從右向左處理舔痪,即先css-loader,再style-loader寓调,
//處理結(jié)束后交給webpack進(jìn)行打包合并,最終輸出到bundle.js中去
  ]
}
};

7锄码、url-loader

webpack無(wú)法處理css中的url地址
安裝:npm i url-loader file-loader -d (file-loader是url-loader的內(nèi)部依賴(lài))

{test:/\.(jpg|png|gif|jpeg|bmp)$/,use:'url-loader?limit=7221&name=[hash:8]-[name].[ext]'}

不加limit時(shí)發(fā)現(xiàn)圖片url會(huì)變成base64夺英。limit給定的值是圖片的大小,單位是byte滋捶,如果圖片大于或等于給定的limit值痛悯,不會(huì)轉(zhuǎn)為base64字符串,如果小于給定的limit則會(huì)轉(zhuǎn)為base64

{test:/\.(ttf|eot|svg|woff|woff2)$/,use:'url-loader'}

8重窟、babel

webpack默認(rèn)只能處理一部分es6新語(yǔ)法载萌,一些高級(jí)的es6等語(yǔ)法處理不了,需要借助第三方loader把高級(jí)語(yǔ)法轉(zhuǎn)為低級(jí)語(yǔ)法之后巡扇,把結(jié)果交給webpack去打包到bundle.js中,通過(guò)babel
1扭仁、安裝
第一套包 npm i babel-core babel-loader babel-plugin-transform-runtime -d
第二套包 npm i babel-preset-env babel-preset-stage-0 -d
2、配置
webpack.config.js配置文件中厅翔,在module節(jié)點(diǎn)下的rules中添加一個(gè)新的匹配規(guī)則
注意:配置babel的loader規(guī)則時(shí)乖坠,必須把node_modules目錄,通過(guò)exclude選項(xiàng)排除掉

{test:/\.js$/,use:'babel-loader',exclude:/node_modules/}//排除node_modules目錄下的js文件

3刀闷、在項(xiàng)目根目錄下新建一個(gè)叫做 .babelrc 的babel配置文件熊泵,屬于json格式

{
  "presets":["env","stage-0"],
  "plugins":["transform-runtime"]
}

9、在webpack構(gòu)建的項(xiàng)目中涩赢,使用vue

復(fù)習(xí):在普通網(wǎng)頁(yè)中使用vue
1戈次、使用script 標(biāo)簽引入vue的包
2纷闺、在index頁(yè)面中均芽,創(chuàng)建一個(gè)id為 app的 div容器
3护奈、通過(guò) new Vue得到一個(gè)vm的實(shí)例

在webpack構(gòu)建的項(xiàng)目中,使用vue
1花墩、安裝vue包:npm i vue -s
2、使用vue模板頁(yè)面澄步,需要安裝相關(guān)loader:npm i vue-loader vue-template-compiler -d冰蘑,在配置文件中添加

{test:/\.vue$/,use:'vue-loader'}

3、main.js

import Vue from 'vue'
import login from './login.vue'//使用模板
//在webpack 中使用import Vue from 'vue'導(dǎo)入的vue構(gòu)造函數(shù)村缸,功能不完整祠肥,
//只提供了runtime-only的方式,并沒(méi)有提供像網(wǎng)頁(yè)中那樣的使用方式,這時(shí)候如果用new Vue 方式會(huì)報(bào)錯(cuò)
//如何修改梯皿,可以具體看下面的補(bǔ)充內(nèi)容
var vm=new Vue({
  el:'#app',
  data:{
    msg:'123'
  },
  render :function(createElements){//可以簡(jiǎn)化為render: c => c(login)
    return createElements(login)
  }
})

補(bǔ)充:包的查找規(guī)則
1.找 下面根目錄中有沒(méi)有 node_modules文件夾
2.在 node_modules文件夾中仇箱,根據(jù)包名县恕,這里用到的是vue,找到對(duì)應(yīng)的 vue 文件夾
3.在vue文件夾中剂桥,找一個(gè)叫做 package.json 的包配置文件
4.在 package.json 文件中忠烛,查找一個(gè) main 屬性【main屬性指定了這個(gè)包被加載時(shí)的入口文件】
修改vue被導(dǎo)入時(shí)包的路徑,除了修改這個(gè)main屬性外权逗,還可以美尸,在webpack.config.js里加一個(gè)節(jié)點(diǎn)

resolve:{
  alias:{
      "vue$":"vue/dist/vue.js"
  }
}

10、結(jié)合webpack使用vue-router

1斟薇、導(dǎo)入vue-router
2师坎、手動(dòng)安裝vue-router
3、創(chuàng)建路由對(duì)象
4奔垦、創(chuàng)建組件
5屹耐、將路由對(duì)象 掛載到vm上

import Vue form 'vue'
import VueRouter form 'vue-router'
Vue.use(VueRouter)
//導(dǎo)入app組件
import app from './app.vue'
//創(chuàng)建 apple 組件
import apple from './main/apple.vue'
var router = new VueRouter({
  routes:[
    {
      path:'/apple',
      component:apple,
      //添加子路由children:[{ path:'red',component:red},{ path:'green',component:green}]
    }
  ]
})
var vm=new Vue({
  el:'#app',
  render: c => c(app),
  router
})

app.vue

<router-link to="/apple">apple</router-link>
<router-view></router-view>

將main.js進(jìn)行改造椿猎,將路由模塊單獨(dú)提取router.js

//創(chuàng)建 apple 組件
import VueRouter form 'vue-router'
import apple from './main/apple.vue'
var router = new VueRouter({
  routes:[
    {
      path:'/apple',
      component:apple,
      //添加子路由children:[{ path:'red',component:red},{ path:'green',component:green}]
    }
  ]
})
export default router

一些隨機(jī)補(bǔ)充

導(dǎo)入時(shí)經(jīng)郴塘耄看到的@:這是webpack設(shè)置的路徑別名。 在build/webpack.base.conf這個(gè)文件里面定義犯眠。默認(rèn)定義:@這東西代表著到src這個(gè)文件夾的路徑
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末按灶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筐咧,更是在濱河造成了極大的恐慌鸯旁,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件量蕊,死亡現(xiàn)場(chǎng)離奇詭異铺罢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)残炮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)韭赘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人势就,你說(shuō)我怎么就攤上這事泉瞻。” “怎么了苞冯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵袖牙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我舅锄,道長(zhǎng)鞭达,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮畴蹭,結(jié)果婚禮上烘贴,老公的妹妹穿的比我還像新娘。我一直安慰自己撮胧,他們只是感情好桨踪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著芹啥,像睡著了一般锻离。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墓怀,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天汽纠,我揣著相機(jī)與錄音,去河邊找鬼傀履。 笑死虱朵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的钓账。 我是一名探鬼主播碴犬,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼梆暮!你這毒婦竟也來(lái)了服协?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤啦粹,失蹤者是張志新(化名)和其女友劉穎偿荷,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體唠椭,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡跳纳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了贪嫂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寺庄。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撩荣,靈堂內(nèi)的尸體忽然破棺而出铣揉,到底是詐尸還是另有隱情饶深,我是刑警寧澤餐曹,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站敌厘,受9級(jí)特大地震影響台猴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一饱狂、第九天 我趴在偏房一處隱蔽的房頂上張望曹步。 院中可真熱鬧,春花似錦休讳、人聲如沸讲婚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筹麸。三九已至,卻和暖如春雏婶,著一層夾襖步出監(jiān)牢的瞬間物赶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工留晚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留酵紫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓错维,卻偏偏與公主長(zhǎng)得像奖地,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赋焕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355