webpack簡單入門

webpack? 是非常主流的打包工具 ,?

webpack必不可少的是下面這幾項(xiàng)

entry, output, module(loader, dev-server) plugins


entry? output ? ?

入口文件和出口文件?

入口文件可以是一個 , 也可以是多個

module.exports = {

????entry: __dirname + "/app/main.js",? ? //入口

????output: { path: __dirname + "/public",? ? //出口

????????filename: "index.js"? ? //文件名

????}

}

上面 entry 是入口 , 唯一的入口就是 app.js??

?__dirname 就是這個入口文件的路徑 , 在出口的時(shí)候也用到了 , 比如入口文件在 aaa/bbb/app/mian.ja , 那么__dirname就是aaa/bbb , 出口自然就是 aaa/bbb/public/index.js .?

如果是多入口文件 , 就可以把entry寫成對象的形式 , 然后出口文件寫成?[name].js 就會自動獲取入口文件的名字

{

????entry: {

????page1: "./page1",

????//支持?jǐn)?shù)組形式,將加載數(shù)組中的所有模塊,但以最后一個模塊作為輸出

????page2: ["./entry1", "./entry2"]

},

output: {

????path: "dist/js/page",

????filename: "[name].bundle.js"

????}

}

常用的 loader 及作用:

style-loader css-loader css相關(guān)

babel-loader es6和jsx

sass-loader node-sass scss相關(guān)

url-loader file-loader 處理二進(jìn)制轉(zhuǎn)base64形式。

{

????test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,????

????loader: 'url-loader',

????options: {

????????limit: 20000,

????????name: 'img/[name].[hash:16].[ext]'

????}

}

上面就表示以 png?jpe?jpeg?gif?svg 結(jié)尾的都用url-loader

比2000b小的就使用base64的格式 , 否則就放在img目錄下 , 名字后加16位的哈希值 , 以.ext為后綴

小圖片用base64可以減少http請求 , 優(yōu)化性能?

dev-server

devServer: {

????historyApiFallback: true,

????hot: true,

????inline: true,

????port: 3000,

????proxy: {

????????'/v4': {

????????????target: 'https://m.maizuo.com/',

????????????secure: false

????????}

????}

},

historyApiFallback :在開發(fā)單頁應(yīng)用時(shí)非常有用,它依賴于HTML5 history API,如果設(shè)置為true,所有的跳轉(zhuǎn)將指向index.html . false就是不跳轉(zhuǎn)

hot: true, inline: true, 表示熱更新 . 如果頁面發(fā)生改變了(除了webpack.config.js) , 那么會自動更新瀏覽器

port 當(dāng)然就是端口 , 如果不寫默認(rèn)就是8080

proxy 反向代理 . 沒有也可以 . 用到得到話在加就可以

常用的 plugins? 及作用:


HtmlWebpackPlugin 向html文件內(nèi)插入生成的js和css文件引用

extract-text-webpack-plugin css文件抽離

CommonsChunkPlugin 分離js的公共模塊

UglifyJsPlugin 壓縮js代碼

BannerPlugin 添加頭部Banner

DefinePlugin 定義變量并替換


示例


var?ExtractTextPlugin?=?require("extract-text-webpack-plugin");

var?HtmlWebpackPlugin?=?require('html-webpack-plugin');

var webpack = require("webpack");

module.exports = {

????entry: {bundle: "./input.js"},

????output: {

????????path: __dirname + "/build",

????????filename: "[name].js"

????},

module: {

????loaders: [

????{

????????test: /\.css$/,

????????loader: ExtractTextPlugin.extract({

????????????fallback: "style-loader",

????????????use: "css-loader"

????????})

????},

????{

????????test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,

????????loader: 'url-loader',

????????options: {

????????????limit: 20000,

????????????name: 'img/[name].[hash:7].[ext]'

????????}

????},

????{

????????test: /\.js$/,

????????loader: 'babel-loader', // ES6轉(zhuǎn)碼用組件

????????query: {

????????????presets: ['es2015']

????????}

????},

????{

????????test: /\.scss$/, // CSS預(yù)處理 預(yù)編譯

????????loader: ExtractTextPlugin.extract({

????????????fallback: "style-loader",

????????????use: "css-loader!sass-loader"

????????})

????}

????]

????},

devServer: {

????historyApiFallback: true,

????hot: true,

????inline: true,

????port: 8080,

????proxy: {//反向代理

????????'/v4': {

????????target: 'https://m.maizuo.com/',

????????secure: false

????}

}

},

plugins:? [

????new ExtractTextPlugin("styles.css"),

????new webpack.optimize.CommonsChunkPlugin('common'),

????new HtmlWebpackPlugin({

????????template: __dirname + "/index.html"

????}),

????new webpack.BannerPlugin({

????????banner: "這是banner"

????}),

????new webpack.DefinePlugin({

????????HOST_NAME: JSON.stringify("http://www.xxx.com")

????}),

????new webpack.optimize.UglifyJsPlugin({

????compress: {

????????warnings: false

????},

????sourceMap: true

????})

????],

????externals: {

????????jquery: "jQuery" // window.jQuery????

????}

};


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容