webpack的學習感悟

來源:互聯網
上載者:User

標籤:config   等等   檔案目錄   require   plugin   項目   console   個數   cnp   

https://github.com/webpack/webpack    webpack gethub地址。

http://webpack.github.io/   webpack 官網

前言

webpack作為現在比較火的前端架構,可以打包js、css、html、less、jade等檔案,並且應用比較廣泛。甚至一些比較火的前端架構都在使用webpack打包工具,例如vue,react等等。本著互連網的分享精神,我就將我自己的理解和想法分享給大家。

安裝

安裝之前如果會用cnpm的盡量用cnpm這樣會快一點,本案例預設電腦上沒有安裝cnpm鏡像。

1、設定全域webpack

npm install -g webpack

2、進入目標檔案夾,本人使用檔案目錄(E:\webpack-test)

cd  E:\webpack-test

3、在項目中引導建立一個package.json檔案 

npm init  (初始化過程就預設按斷行符號就行了)

4、安裝webpack

npm install webpack --save-dev   ( --save-dev 安裝包資訊將加入到devDependencies(開發階段的依賴),所以開發階段一般使用它) 安裝完成後會在項目目錄下出現node_module檔案夾就證明安裝成功了

 跟我一起使用案例1

1、在項目目錄下建立一個test1.js檔案 ,隨便寫一個函數。然後進行打包

function test(){    console.log(‘1‘)}

2、開始打包

在命令列內輸入webpack test1(檔案入口)   test-pack.js(打包完成名字)

3、打包完成

  打包完成後命令列會返回幾個參數,1、Hash - 雜湊值2、Version - webpack的版本、 Time:打包耗費時間長度。

  另外還好返回一個列表Asset - 這次產生的檔案、Size - 打包後的大小、Chunks - 這次打包的分塊、Chunk Name  - 這次打包的塊名稱。

4、開啟test-pack.js檔案

我們發現,檔案好像比沒有打包之前大了,因為webpack打包之前會產生一些需要的內建函數,在頁面的最下方可以看見我們打包的代碼。

webpack打包css檔案 

注意wenpack中在js檔案內是可以引用css檔案的。

1、建立一個css檔案名稱叫做style.css

  在裡面隨便寫一些css代碼。

2、在test.js檔案中引用css

  test.js全部代碼

require(‘./style.css‘)function test() {    console.log(‘1‘)}

3、打包css 但是打包之前需要安裝css-loader、 和style-loader否則會報錯。

  npm install css-loader style-loader  --save-dev    style-loader 是讓css生效,生效後的效果就是在html頁面的head標籤裡自動建立style標籤並插入代碼(這個以後的案例會講)、css-loader是讓打包軟體識別css並處理css檔案。

4、運行打包命令

  webpack test1.js test-pack.js  - 但是還會報錯提示- You may need an appropriate loader to handle this file type 明明已經安裝了loader怎麼還報錯呢。

  解決錯誤,根目錄也就是webpack-test 下建立wenpack.config.js檔案寫入如下代碼。即可解決。錯誤原因是沒有指定loader。

var Webpack = require("webpack");module.exports = {    module: {        loaders: [            {                test: /\.css$/,                loader: "style-loader!css-loader"            }        ]    }}

  或者引入css時候增加css-loader!,首碼即可

require(‘css-loader!./style.css‘);

5、打包完成

打包完成後我們看test-pack檔案中又多出了好多webpack引入的一些代碼,在代碼的中間部分可以看見我們剛才寫的css,這說明我們的css已經引入成功了。

 如何?多檔案打包

  在一些單頁面應用中一般都會打包成一個文科,那例如像官網(舉例)那種也可以打包成為多頁應用。但是要如何配置呢。很簡單只需要配置webpack.config.js檔案即可。

  代碼如下,配置完成後 在命令列內輸入 webpack 就可以了,因為已經配置了webpack.config.js。就不用像上面案例那樣輸入很長一段語句了。

var path = require(‘path‘) //這裡是引入了node.js的path模組,module.exports = {    entry: {        main1:‘./src/script/main.js‘,    //如果這的value指定的是一個數組,那麼就相當於將兩個檔案打包成一個檔案。        main2:‘./src/script/main2.js‘,    }, //多檔案入口檔案配置  如果是單檔案只需要寫一個.string路徑即可。    output: {        path: path.resolve(__dirname, ‘./dist/js‘), //打包後的檔案的絕對路徑地址        filename: ‘[name].js‘ //打包後的檔案名稱[name]就像當月entry下的key(main1)還有hash、chunkhash等選項,但一般不怎麼用所以呢,就不只拿name舉例了。如果這裡不寫[]變數預留位置而是一個普通的字串的話打包檔案會被覆蓋,最後只會留下最後打包那個檔案。    },};

 

chunkhash使用後檔案產生動態名稱,那麼script要怎麼引用呢。

  在一些大型項目中需要上傳到伺服器遠程倉庫,這時候chunkhash就非常有效,因為chunkhash是當檔案修改後他才會發生改變,對代碼的控制性比較強。但是chunkhash改變後 script 的引用名稱也需要變更,這樣做是不是很麻煩呢,但是有一種方法可以解決。請看代碼。

  1、安裝 npm install html-webpack-plugin --save-dev

var path = require(‘path‘);var htmlWebpackPlugin = require(‘html-webpack-plugin‘); //引入模組。module.exports = {    entry: {        main1: ‘./src/script/main.js‘,        main2: ‘./src/script/main2.js‘,    }, //多檔案入口檔案配置  如果是單檔案只需要寫一個.string路徑即可。    output: {        path: path.resolve(__dirname, ‘./dist/js‘), //打包後的檔案地址        filename: ‘[name]-[chunkhash].js‘ //打包後的檔案名稱[name]就像當月entry下的key(main1)    },    plugins: [        new htmlWebpackPlugin({            template: ‘index.html‘  //指定模板檔案,如果不指定的話會自動產生一個建立的index.html檔案一起打包到path指定的打包地址。如果指定了的話,會將指定的模板打包後放入path指定的打包地址,然後自動使用script的 src引入entry下的所有檔案        })    ]};

 

webpack的學習感悟

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.