網上有不少webpack的介紹,也有很多的視頻,可是很多人看到應該仍是不是很瞭解webpack裏面究竟是講什麼,並且報錯了以後也是不知所措css
那麼這裏我做爲一個工具小白就闡述一下小白麪前應該怎麼學習webpack吧,當你看完以後,我相信對其餘工具也會有更深的瞭解html
在個人文章裏主要講解:前端
還有更多的功能我也會在文中說起到node
附:webpack官網地址[英文官網][中文官網]webpack
Webpack是時下最流行的模塊打包器web
它的主要任務就是將各類格式的JavaScript代碼,甚至是靜態文件進行分析、壓縮、合併、打包,最後生成瀏覽器支持的代碼正則表達式
用一張圖片簡單表示一下npm
特色:json
綜合來講webpack綜合了目前網絡上的打包工具的優勢,可是也要合理使用,否則也會拔苗助長gulp
npm是前端開發者必備的下載工具吧,若是你連這個也沒有安裝的話,那麼你就得快點安裝了,這裏附一個gulp打包工具的教程,這裏第一和第二步有node.js和npm的安裝具體教程,若是你沒有安裝,那就得快點入門了。
npm init
而後會出現一大堆輸入的東西,這裏咱們所有選擇默認輸入enter就行了
輸入完了以後,它會提示你輸入的信息給你覈對,按下確認以後,就會在你的項目目錄下生成了package.json
下一步,咱們在咱們的文件夾裏面安裝一下webpack吧,在項目目錄下的cmd輸入
npm install webpack --save-dev
這就安裝好了,這裏就給你們來一個小Demo,讓你們更加了解webpack的打包方式吧,若是已經有基礎的同窗能夠跳過這裏
在webpack-test下新建一個hello.js,輸入下面的代碼
//自定義一個函數 function hello (str) { alert(str); }
而後在命令行輸入
webpack hello.js hello.bundle.js
這裏的意思是用webpack文件將hello.js打包成hello.bundle.js輸出在根目錄下,成功以後在根目錄下就會出現hello.bundle.js文件
而後介紹一下咱們打包成功的各個東西的含義吧
而後再在根目錄下新建一個world.js,在文件裏輸入
//隨便自定義一個函數 function world () { }
再去修改hello.js成爲
require('./world.js') //鏈接到另一個函數塊 //自定義一個函數 function hello (str) { alert(str); }
再輸入一下
webpack hello.js hello.bundle.js
進行打包以後就會發現,打包成功裏面hello.js的chunks序列號是0,world.js的chunks序列號是1,而後在hello.bundle.js看到他們的序列號也是這樣。
那麼若是我想也把css文件也打包進去應該怎麼辦呢?
咱們再在根目錄下新建一個style.css,在裏面簡單輸入
html, body { padding: 0; margin: 0; }
而後這裏咱們須要下載兩個loaders加載器,爲何要下載loaders加載器呢,你也能夠想想,css文件和js文件畢竟不同,若是在hello.js引入style.css那麼確定會報錯,這個時候,咱們須要一種東西幫忙加載咱們的css成js
接下來咱們下載兩個loaders加載器,後面說一下這兩個的做用,在命令行輸入
npm install css-loader style-loader
而後把hello.js改爲
require('./world.js') //鏈接到另一個函數塊 require('css-loader!./style.css') //利用css-loader加載器解析css文件使之可讀 //自定義一個函數 function hello (str) { alert(str); }
再在輸入一下指令,打包好了後了能夠觀察hello.bundle.js裏面就多了css文件裏面的內容
這時候,你也許會以爲,我說了那麼多,那麼,怎麼把這些東西用到咱們的頁面中嗎?下面就會說到
在咱們的跟目錄下新建一個index.html,加入下面內容
<!DOCTYPE html> <html lang="en"> <head> <title>webpack</title> </head> <body> <script src="./hello.bundle.js"></script> </body> </html>
再把咱們的style.css改爲
html, body { padding: 0; margin: 0; } body { color: red; }
再把咱們的hello.js改爲
require('./world.js') //鏈接到另一個函數塊 require('style-loader!css-loader!./style.css') //利用css-loader加載器解析再用style-loader解析css文件使之可讀 //自定義一個函數 function hello (str) { alert(str); } hello('hello webpack');
而後咱們再打包運行一下,就能夠在頁面看到咱們的結果,這時候若是你細心,就會發現咱們在css-loader前面加了個style-loader,若是你不加的話,你就會發現你的頁面打開後不是紅色的,由於還沒通過style-loader的解析,固然這只是一種方法,還有其餘方法能夠自尋在官網看看文檔。
若是你以爲每次修改以後打包也很麻煩,這時候咱們的watch就有做用了,你能夠在打包後面加入,例如輸入
webpack hello.js hello.bundle.js --watch
而後下次修改就不用在進行輸入打包代碼了,這上面也就是簡單的介紹了一下咱們的webpack是怎麼從一個文件連接到不少文件的。
這裏就是咱們最重要的一個部分了,若是你看過不少webpack打包後的開源項目以後,你就會發現,有些時候你不知道從哪裏看起,那就從配置文件開始看起來吧
相信你應該也在很多的文章中看到有關於配置文件的說法的吧,畢竟配置文件也算是最重要的一部分了,這裏也能夠推薦你看一篇我以爲還不錯的webpack入門
不過我若是你沒有基礎的話,建議繼續看下個人再去看那一篇,收穫會更大
首先,咱們新建一個項目webpack-demo,按照我上面教程文章裏面下載安裝好webpack,安裝完了以後,咱們須要新建幾個文件以及文件夾,以下面所示
而後在index.html輸入
<!-- index.html --> <!DOCTYPE html> <html lang="en"> <head> <title>webpack demo</title> </head> <body> <script src="./dist/js/bundle.js"></script> </body> </html>
在webpack.config.js也就是webpack的配置文件裏面輸入
// webpack.config.js module.exports = { entry:'./src/script/main.js', //咱們的入口文件,至關於前面一節webpack-test中的hello.js output:{ path: __dirname + "/dist/js", /*打包完了以後,把內容輸出到這個文件夾上,也能夠寫成"./dist/js", 可是這樣放在服務器上路徑可能會出錯,因此加上__dirname*/ filename: 'bundle.js' //輸入到上面path文件夾裏面的bundle.js,沒有則自動新建 } }
再在main.js裏面輸入
//main.js function helloworld () { alert('hello world'); } helloworld();
在命令行輸入webpack,就將咱們的入口文件及其連接文件(這裏尚未)打包輸出在dist/js目錄下面的bundle.js文件了。
這就是咱們的配置文件的最簡單的用法,之後咱們還能夠在裏面配置不少loaders,甚至更復雜的打包,下面一步步說明吧。
咱們也能夠不用在命令行裏面輸入webpack,由於咱們可能之後會查詢更多東西,所以咱們能夠,在package.json的script裏面加入:
"webpack":"webpack --config webpack.config.js --progress --color"
這裏的--progress和--color只是爲了輸出進度條和color,沒有實際意義,而後在命令行輸入npm run webpack就能夠默認使用webpack進行打包了。
還有更多關於咱們入口文件和輸出文件的介紹,我建議看一下慕課網的這個視頻會更加了解webpack配置文件
在說這個以前,咱們爲何要自動生成html頁面?咱們直接用index.html不就能夠了?可是實際項目每每是有多個頁面的,不過這裏咱們就簡單介紹一個頁面怎麼自動生成,多個也是一樣的原理,咱們先來安裝一個插件html-webpack-plugin,咱們在命令行輸入:
npm install html-webpack-plugin --save-dev
而後把咱們的webpack.config.js裏面修改爲
// webpack.config.js var htmlWebpackPlugin = require('html-webpack-plugin')//引入咱們的插件 module.exports = { entry: { main: './src/script/main.js', }, //咱們的入口文件,至關於前面一節webpack-test中的hello.js output:{ path: __dirname + "/dist/js", /*打包完了以後,把內容輸出到這個文件夾上,也能夠寫成"./dist/js", 可是這樣放在服務器上路徑可能會出錯,因此加上__dirname*/ filename: '[name]-[hash].js' //輸入到上面path文件夾裏面的bundle.js,沒有則自動新建 }, plugins:[ new htmlWebpackPlugin() //對插件進行實例化 ] }
而後,在咱們的dist下面就有了一個項目自動生成的inex.html文件了
可是若是你細心就能夠發現這個時候的index.html和咱們原來的index.html沒有任何的聯繫,這時候咱們須要修改咱們配置文件中的插件實例化那裏修改爲
plugins:[ new htmlWebpackPlugin({ template: 'index.html' }) //對插件進行實例化 ]
再打包一次以後,就會發現生成的dist目錄下面的index.html文件就會綁定了其餘js文件。更具體的就請查看一下官方文檔了,畢竟篇幅不能太長。
前面咱們也有所提到咱們的loader加載器,可是實際中是怎麼樣的呢,這裏我圍繞咱們項目常常利用babel-loader轉換ES6
Loaders須要單獨安裝而且須要在webpack.config.js下的modules關鍵字下進行配置,Loaders的配置選項包括如下幾方面:
首先,新建一個工程webpack-loader吧,而後將項目用npm初始化後,再在項目下下載webpack,而後構建好下面的這些目錄
用npm下載一下html-webpack-plugin插件
npm install html-webpack-plugin --save-dev
修改咱們的index.html成
<!DOCTYPE html> <html lang="en"> <head> <title>Document</title> </head> <body> </body> </html>
layer.html
<div class="layer"> <div>this is a layer</div> </div>
layer.js
// import tpl from './layer.html' function layer () { return { name: 'layer', tpl: tpl } } export default layer;
app.js
//app.js import layer from './component/layer/layer.js'; //導入layer //使用ES6語法 const App = function () { console.log(layer); } new App()
Babel實際上是一個編譯JavaScript的平臺,它的強大之處表如今能夠經過編譯幫你達到如下目的:
首先,咱們先安裝Babel在命令行輸入
npm install --save-dev babel-loader babel-core
再安裝一下babel中的latest這裏咱們須要用到
npm install --save-dev babel-preset-latest
修改咱們的配置文件webpack.config.js
var htmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { entry: { main: './src/app.js', }, //咱們的入口文件,至關於前面一節webpack-test中的hello.js output:{ path: __dirname + "/dist/js", /*打包完了以後,把內容輸出到這個文件夾上,也能夠寫成"./dist/js", 可是這樣放在服務器上路徑可能會出錯,因此加上__dirname*/ filename: 'bundle.js' //輸入到上面path文件夾裏面的bundle.js,沒有則自動新建 }, module: { loaders: [ { test: /\.js$/, //匹配全部的js文件 loader: 'babel-loader', //引用lbabel插件 } ] }, plugins: [ new htmlWebpackPlugin({ filename:'index.html', template:'index.html', inject:'body' //將script標籤加載進body }) ] }
再在咱們的package.json下加入
{ //... "babel": { "presets": ["latest"] }, //... }
在命令行輸入webpack,就能夠在咱們的dist目錄下面的js裏面看到咱們的配置文件已經有了這些文件
其餘加載器css,less,sass等的原理也是同樣,這裏就不一一介紹了
有興趣的話,能夠繼續看看慕課網的視頻,在下也是受人啓發。
還有更多的加載器能夠在咱們的webpack官網進行查詢,這裏我就不進行多解釋了