webpack教程 babel-preset語(yǔ)法級(jí)別打包 babel polyfill 全局墊片 babel runtime transform 局部墊片 函數(shù)方法級(jí)別打包

################主流的前后端模塊化規(guī)范###############

// 高效的學(xué)習(xí)

后端服務(wù)器端

commonjs nodejs 規(guī)范模塊化開發(fā) 主流的服務(wù)器端的

// module.exports 和 require

前端瀏覽器端

EcmaScript? Module? 主流的瀏覽器端的規(guī)范

一個(gè)文件一個(gè)模塊

export 暴露一個(gè)模塊 import 引入一個(gè)模塊

導(dǎo)入默認(rèn)暴露的和a箱硕,b方法

import theDefault,{a,b} from './text.js'

import {a,b} from './text.js';

import theDefault from './text.js'

重新命名

import {a as a1} from './text.js'

所有的接口引入 定義為對(duì)象a2

import * as a2 from './text.js'

export default

export let a = function(){

}

export {}

先import后export

export * from ''

#####################以往的前端規(guī)范###################

// AMD

// Async Module Definition

// define定義模塊

// require加載模塊

// RequireJS

// 依賴前置芝薇,提前執(zhí)行

// CMD

// Common Module Definition

// seajs

// 盡可能懶執(zhí)行?

// AMD CMD兩者的不同在與 require進(jìn)來的模塊 一個(gè)提前執(zhí)行一個(gè)并不執(zhí)行

// UMD

// ESM

########################css模塊化規(guī)范#####################

##########################環(huán)境準(zhǔn)備########################

npm i webpack -g

##########################概述#############################

打包器 treeshaking 打包沒用的就不打包

scope hoistion

entry 入口

代碼的入口 require 找依賴 找依賴的依賴,多個(gè)入口的情況

module.exports = {? ? 這個(gè)是commonjs的寫法婚惫,koa中見過

entry:'index.js'?

entry:['index.js','start.js']?

}

另外的一種寫法封断,推薦的寫法涣狗,有一個(gè)名字的寫法

module.exports = {? ? 這個(gè)是commonjs的寫法碑诉,koa中見過?

entry:{

index:'index.js'? 鍵值對(duì)的寫法

}

}

output 出口

打包生成的文件bundle

一個(gè)的情況下

module.exports = {? ? ?

entry:{

index:'index.js'?

},

output:{

filename:'index.min.js'

}

}

多個(gè)的情況下

module.exports = {? ? ?

entry:{

index:'index.js' ,

vendor:'vendor.js'?

},

output:{? 這里name所代表的就是entry里面的鍵[index][vendor]

filename:'[name].min.[hash:5].js'

}? ? ? ? 出現(xiàn)的標(biāo)識(shí)碼 md5碼

}

loaders 處理其他類型的 處理文件 轉(zhuǎn)化為模塊

編譯相關(guān)的 babel-loader ES6使用 ts-loader TypeScript使用

樣式相關(guān)的 style-loader css-loader less-loader postcss-loader

文件相關(guān)的 file-loader url-loader

比如 處理 css 可以作為js模塊進(jìn)行引入

module.exports={

module:{? ? ? module 屬性 對(duì)module的一個(gè)定義

rules:[? 對(duì)于不同文件定義的loader

{? test 當(dāng)滿足這個(gè)正則携取,就使用use定義的css-loader

test:/\.css$ /, 以css文件結(jié)尾

use:'css-loader'

}

]

}

}

plugins 其他的功能

參與打包過程 打包優(yōu)化和壓縮 配置編譯時(shí)的變量

優(yōu)化相關(guān)的 CommonsChunkPlugin UglifyJsPlugin

功能相關(guān)的 ExtractTextWebpackPlugin HtmlWebpackPlugin Hot

const webpack = require('webpack')

module.exports={

plugins:[ 數(shù)組中的每一項(xiàng)對(duì)plugin的應(yīng)用

new webpack.optimize.UglifyJsPlugin()

]

}

##########################名詞#############################

Chunk 代碼塊

Bundle 大包過的

Module 模塊

######################使用webpack############################

webpack命令

webpack -h webpack -v

webpack entry [entry] output

驚訝的是 webpack-cli -h

可以交互式的初始化一個(gè)項(xiàng)目

webpack-cli init webpack-addons-demo

pengwings? app? vendor

遷移項(xiàng)目 V1 =》V2

webpack-cli migrate

webpack配置 用的多

webpack 回去找這個(gè)文件下的webpack配置文件

webpack --config webpack.conf.dev.js 自己指定配置文件

webpack第三方腳手架

angular-cli react-starter

##########################打包js 最基本的打包#############################

一太示、webpack entry output? 使用命令打包?

1柠贤、這里使用es6的方法

app.js 這個(gè)是入口文件 下面是內(nèi)容

import sum form './sum'?

console.log('sum(23,24) = ',sum(23,24))

sum.js 這個(gè)是被入口文件導(dǎo)入的文件

export default function(a,b){

return a+b

}

接下來打包:

webpack app.js bundle.js

2、這里使用commomjs方法 nodejs語(yǔ)法

app.js 這個(gè)是入口文件 下面是內(nèi)容

const minus = require('./minus.js')

console.log('minus(23,24) = ',minus(23,24))

minus.js 這個(gè)是被入口文件導(dǎo)入的文件

module.exports = function(a,b){

return a+b

}

接下來打包:

webpack app.js bundle.js

二类缤、webpack --config webpack.conf.js

1臼勉、使用配置文件 在編寫的時(shí)候需要時(shí)用common規(guī)范nodejs

webpack.conf.js 這個(gè)是配置文件 下面是內(nèi)容

module.exports = {

entry:{

app:'./app.js'

},

output:{

filename:'[name].[hash:5].js'

}

}

接下來打包:

webpack 如果直接使用,系統(tǒng)誰找默認(rèn)的 ./webpack.config.js但是我們上面自定義了webpack.conf.js

webpack --config webpack.conf.js

###########################編譯es6 babel-preset 語(yǔ)法級(jí)別的打包 規(guī)范############################

npm i babel-loader babel-core -save

npm i babel-preset-env -save-dev

1餐弱、env 包括了es2015-2017

app.js 這個(gè)就是要打包的js文件 使用的es6語(yǔ)法

let func = () =>{}

const NUM = 45

let arr = [1,2,3,4]

let arr1 = arr.map(item => item *2)

console.log('Set類型:',new Set(arr1))

webpack.conf.js 這個(gè)是配置文件 下面是內(nèi)容

module.exports = {

entry:{

app:'./app.js'

},

output:{

filename:'[name].[hash:5].js'

},

module:{? 這個(gè)模塊設(shè)置es6相關(guān)

rules:[

{

test:/\.js$ /,? 匹配正則然后使用use

use:{

loader:'babel-loader',? 使用babel-loader

options:{ 設(shè)置babel-loader

presets:[ presets選項(xiàng) babel-preset-env 這個(gè)包括了2015-2017版本的 es

'babel-preset-env',{

targets:{? ? ? ? ? 適應(yīng)的環(huán)境為瀏覽器? 市場(chǎng)占有率>1% 和 最近的兩個(gè)版本

browsers:['>1%','last 2 versions']

}

}

]

}

},

exclude:'/node_modules/'? 排除在外的

}

]

}

}

接下來打包:

webpack --config webpack.conf.js

? ? can i use?

二宴霸、webpack --config webpack.conf.js

1、使用配置文件 在編寫的時(shí)候需要時(shí)用common規(guī)范nodejs

webpack.conf.js 這個(gè)是配置文件 下面是內(nèi)容

module.exports = {

entry:{

app:'./app.js'

},

output:{

filename:'[name].[hash:5].js'

}

}

接下來打包:

webpack 如果直接使用膏蚓,系統(tǒng)誰找默認(rèn)的 ./webpack.config.js但是我們上面自定義了webpack.conf.js

webpack --config webpack.conf.js

###########################編譯es6 babel-preset 語(yǔ)法級(jí)別的打包 規(guī)范############################

npm i babel-loader babel-core -save

npm i babel-preset-env -save-dev

1瓢谢、env 包括了es2015-2017

app.js 這個(gè)就是要打包的js文件 使用的es6語(yǔ)法

let func = () =>{}

const NUM = 45

let arr = [1,2,3,4]

let arr1 = arr.map(item => item *2)

console.log('Set類型:',new Set(arr1))

webpack.conf.js 這個(gè)是配置文件 下面是內(nèi)容

module.exports = {

entry:{

app:'./app.js'

},

output:{

filename:'[name].[hash:5].js'

},

module:{? 這個(gè)模塊設(shè)置es6相關(guān)

rules:[

{

test:/\.js$ /,? 匹配正則然后使用use

use:{

loader:'babel-loader',? 使用babel-loader

options:{ 設(shè)置babel-loader

presets:[ presets選項(xiàng) babel-preset-env 這個(gè)包括了2015-2017版本的 es

'babel-preset-env',{

targets:{? ? ? ? ? 適應(yīng)的環(huán)境為瀏覽器? 市場(chǎng)占有率>1% 和 最近的兩個(gè)版本

browsers:['>1%','last 2 versions']

}

}

]

}

},

exclude:'/node_modules/'? 排除在外的

}

]

}

}

接下來打包:

webpack --config webpack.conf.js

? ? can i use?

##########################babel polyfill? 全局墊片 函數(shù)方法級(jí)別打包#############################

全局墊片 開發(fā)應(yīng)用的

npm i babel-polyfill -s

import 'babel-polyfill'

##########################babel runtime transform? 局部墊片 函數(shù)方法級(jí)別打包#############################

局部墊片 開發(fā)框架

如果使用到es6 es7的時(shí)候 會(huì)把每一個(gè)方法打包到單獨(dú)的文件里面去

npm i babel-plugin-transform-runtime -save-dev

npm i babel-runtime -s

如何使用:在項(xiàng)目的根目錄下創(chuàng)建一個(gè) .babelrc 里面配置和babel先關(guān)的內(nèi)容

.babelrc 文件內(nèi)容如下: json格式

{

'presets':[

['babel-preset-env',{

'targets':{

'browsers':['last 2 versions']

}

}]

]

'plugins':['transform-runtime']

}

###########################總結(jié)一下############################

Generator es7 Set新的類型 等

應(yīng)用開發(fā)一般使用 babel-presets 就可以,但是在打包的時(shí)候有些新的方法是沒有進(jìn)行打包處理的,比如.map() .includes() new Set()等驮瞧,這個(gè)時(shí)候需要進(jìn)一步打包

babel-presets 只是針對(duì)語(yǔ)法 進(jìn)行版本的規(guī)范 針對(duì)函數(shù)和方法需要借助一下的插件

如果要是使用es6 其他的方法 import 'babel-polyfill' 這個(gè)會(huì)污染全局變量

如果開發(fā) 庫(kù)框架的的時(shí)候 使用:babel-runtime? 將presets 拿到根目錄下的? .babelrc 文件里面 json格式 并且加上 'plugins':['transform-runtime']

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氓扛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子论笔,更是在濱河造成了極大的恐慌采郎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狂魔,死亡現(xiàn)場(chǎng)離奇詭異蒜埋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)最楷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門整份,熙熙樓的掌柜王于貴愁眉苦臉地迎上來待错,“玉大人,你說我怎么就攤上這事皂林±署” “怎么了蚯撩?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵础倍,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我胎挎,道長(zhǎng)沟启,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任犹菇,我火速辦了婚禮德迹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘揭芍。我一直安慰自己胳搞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布称杨。 她就那樣靜靜地躺著肌毅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姑原。 梳的紋絲不亂的頭發(fā)上悬而,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音锭汛,去河邊找鬼笨奠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛唤殴,可吹牛的內(nèi)容都是我干的般婆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼朵逝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼腺兴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廉侧,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤页响,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后段誊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體闰蚕,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年连舍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了没陡。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盼玄,靈堂內(nèi)的尸體忽然破棺而出贴彼,到底是詐尸還是另有隱情,我是刑警寧澤埃儿,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布器仗,位于F島的核電站,受9級(jí)特大地震影響童番,放射性物質(zhì)發(fā)生泄漏精钮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一剃斧、第九天 我趴在偏房一處隱蔽的房頂上張望轨香。 院中可真熱鬧,春花似錦幼东、人聲如沸臂容。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脓杉。三九已至,卻和暖如春娜亿,著一層夾襖步出監(jiān)牢的瞬間丽已,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工买决, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沛婴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓督赤,卻偏偏與公主長(zhǎng)得像嘁灯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躲舌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容