成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Webpack系列—快速入門

TIGERB / 3474人閱讀

摘要:如使用插件為我們自動(dòng)生成一個(gè)文件。安裝使用生產(chǎn)和開發(fā)構(gòu)建分離生產(chǎn)和開發(fā)中的構(gòu)建肯定是不同,生產(chǎn)中側(cè)重于一個(gè)更好的開發(fā)體驗(yàn),而生產(chǎn)環(huán)境中則需要更多的性能優(yōu)化,更小的。可以指定命令運(yùn)行以來(lái)的配置文件,通過(guò)在中寫入是一種不錯(cuò)的方式。

原文地址:https://github.com/huruji/blog/issues/3

入口

單文件入口
指定entry鍵值

const config = {
  entry: "./yourpath/file.js"
};
module.exports = config

上面的是以下的簡(jiǎn)寫:

const config = {
  entry: {
    main: "./yourpath/file.js"
  }
};
module.exports = config

多文件入口
對(duì)entry采用對(duì)象寫法,指定對(duì)應(yīng)的鍵值對(duì),為了輸出這多個(gè)文件可以使用占位符

const path = require("path");
const config = {
  entry: {
    app1: "./src/main.js",
    app2: "./src/app.js"
  },
  output: {
    filename: "[name].bundle.js",
    path: path.join(__dirname, "dist")
  }
};

module.exports = config;
輸出

指定打包構(gòu)建之后輸出的文件
單文件輸出
指定output鍵值,值為對(duì)象,對(duì)象中指定path和filename

const path = require("path");
const config = {
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist")
  }
};

module.exports = config;

多文件輸出
使用占位符,輸出文件將按照多文件入口指定的鍵來(lái)替代占位符

const path = require("path");
const config = {
  entry: {
    app1: "./src/main.js",
    app2: "./src/app.js"
  },
  output: {
    filename: "[name].bundle.js",
    path: path.join(__dirname, "dist")
  }
};

module.exports = config;
Loader

Loader可以在加載模塊時(shí)預(yù)處理文件,類似于gulp中的task。配置loader需要在module選項(xiàng)下指定對(duì)應(yīng)后綴名相應(yīng)的rules,使用test正則指定后綴名,使用use指定相應(yīng)的loader

允許在js中import css
需要使用style-loader和css-loader,首先需要安裝:

npm i css-loader style-loader --save-dev

使用loader

const path = require("path");

const config = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist")
  },
  module: {
    rules: [{
      test: /.css$/,
      use: [
        "style-loader",
        "css-loader"
      ]
    }]
  }
};

module.exports = config;

模塊文件寫法:

import "./css/main.css"

允許加載圖片
需要使用file-loader,首先安裝:

npm i file-loader --save-dev

使用:

const path = require("path");

const config = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist")
  },
  module: {
    rules: [{
      test: /.(png|jpg|svg|gif)$/,
      use: [
        "file-loader"
      ]
    }]
  }
};

module.exports = config;

模塊文件寫法:

import logo from "./image/logo.svg";
插件

插件的目的在于解決loader解決不了的事情,使用插件指定plugins選項(xiàng)即可,需要注意的使用插件需要引入插件。如使用HtmlWebpackPlugin插件為我們自動(dòng)生成一個(gè)html文件。

首先安裝:

npm i --save-dev html-webpack-plugin

配置webpack

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const config = {
  entry: "./src/main.js",
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist")
  },
  module: {
    rules: [{
      test: /.css$/,
      use: [
        "style-loader",
        "css-loader"
      ]
    },{
      test: /.(png|jpg|svg|gif)$/,
      use: [
        "file-loader"
      ]
    }]
  },
  plugins: [
    new HtmlWebpackPlugin({
      title: "我的webpack"
    })
  ]
};

module.exports = config;
使用source map

源代碼被webpack打包之后,會(huì)很難追蹤到原始的代碼的位置,使用source map功能,可以將編譯后的代碼映射回原始代碼位置,指定devtool選項(xiàng)即可:

const config = {
  // ....
  devtool: "inline-source-map"
};

module.exports = config;
使用webpack-dev-server

webpack-dev-server提供了一個(gè)簡(jiǎn)單的web服務(wù)器,并能夠?qū)崟r(shí)重新加載使用webpack需要先安裝:

npm i --save-dev webpack-dev-server

在配置文件中指定devServer選項(xiàng),告訴服務(wù)器在哪里尋找文件

const config = {
  // ....
  devServer: {
    contentBase: "./dist"
  }
};

module.exports = config;

使用命令行運(yùn)行命令或者在package.json中指定scripts

webpack-dev-server --open

此時(shí)服務(wù)將運(yùn)行在8080端口,其中open選項(xiàng)表示服務(wù)開啟之后立即在默認(rèn)瀏覽器中打開頁(yè)面。

開啟熱更新

開啟熱更新很簡(jiǎn)單,只需要更新webpack-dev-server配置,增加hot選項(xiàng),同時(shí)使用webpack自帶的HMR插件

const config = {
  // ....
  devServer: {
    contentBase: "./dist",
    hot:true
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin()
  ]
};

module.exports = config;
精簡(jiǎn)輸出

在實(shí)際中是開發(fā)中可能有些模塊的方法并沒(méi)有被使用,也就是說(shuō),在開發(fā)中這些方法并沒(méi)有被import,這些沒(méi)有被使用的代碼應(yīng)該被刪除的,使用uglifyjs-webpack-plugin插件可以幫助我們刪除這些代碼,同時(shí)做代碼混淆和壓縮。
安裝:

npm i -D uglifyjf-webpack-plugin

使用:

const UglifyJSPlugin = require("uglifyjs-webpack-plugin")

const config = {
  // ....
  plugins: [
    new UglifyJSPlugin()
  ]
};

module.exports = config;
生產(chǎn)和開發(fā)構(gòu)建分離

生產(chǎn)和開發(fā)中的構(gòu)建肯定是不同,生產(chǎn)中側(cè)重于一個(gè)更好的開發(fā)體驗(yàn),而生產(chǎn)環(huán)境中則需要更多的性能優(yōu)化,更小的chunk。webpakck可以指定命令運(yùn)行以來(lái)的配置文件,通過(guò)在package.json中寫入script是一種不錯(cuò)的方式。而生產(chǎn)和開發(fā)中的配置肯定有很多重復(fù)的地方,使用webpack-merge可以合并通用配置
安裝:

npm i -D webpack-merge

webpack.common.js

const path = require("path");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");

const config = {
  entry: "./src/main.js",
  plugins: [
    new CleanWebpackPlugin(["dist"]),
    new HtmlWebpackPlugin({
      title: "My App"
    })
  ],
  output: {
    filename: "bundle.js",
    path: path.join(__dirname, "dist")
  },
}

module.exports = config;

webpack.dev.js

const merge = require("webpack-merge");
const common = require("./webpack.common");

const config = merge(common, {
  devtool: "inline-source-map",
  devServer: {
    contentBase: "./dist"
  }
});

module.exports = config;

webpack.prod.js

const merge = require("webpack-merge");
const UglifyJSPlugin = require("uglifyjs-webpack-plugin");
const common = require("./webpack.common");

const config = merge(common, {
  plugins: [
    new UglifyJSPlugin()
  ]
});

module.exports = config;

package.json

{
  // ......
  "scripts": {
      "start": "webpack-dev-server --open --config webpack.dev.js",
      "build": "webpack --config webpack.prod.js"
    },
  // ......
}

許多l(xiāng)ib通過(guò)與process.env.NODE_ENV環(huán)境關(guān)聯(lián)來(lái)決定lib中使用哪些內(nèi)容,使用webpack內(nèi)置的DefinePlugin可以為所有依賴指定這個(gè)變量。

const config = {
  // ......
  plugins: [
    new webpack.DefinePlugin({
      "process.env": {
        "MODE_ENV": JSON.stringify("production")
      }
    })
  ]
  // ......
}
讓輸出的文件名帶有哈希值

讓文件名帶有hash可以方便在生產(chǎn)環(huán)境中用戶及時(shí)更新緩存,讓文件名帶有hash可以使用和構(gòu)建相關(guān)的[hash]占位符,也可以使用與chunk相關(guān)的[chunkhash]占位符,通常后一種是更好的選擇

const config = {
  //......
  output: {
    filename: [name].[chunkhash].js,
    path: path.join(__dirname, "dist")
  }
  // ......
}
讓webpack不打包指定的lib

在開發(fā)中有些時(shí)候我們需要webpack不打包某些lib,這在我們開發(fā)lib的時(shí)候特別常見,比如我們?yōu)閞eact開發(fā)插件,不希望打包的時(shí)候包含react。使用配置的external選項(xiàng)可以做到,

const config = {
  "externals": [
    "react",
    "react-dom"
  ]
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85194.html

相關(guān)文章

  • webpack 2 實(shí)踐系列(一) — 安裝與入門

    摘要:全局安裝安裝成功之后,現(xiàn)在命令就在全局生效。為了將依賴關(guān)系與捆綁到一起,我們需要導(dǎo)入。執(zhí)行命令,入口文件為,輸出文件,其中未使用的依賴關(guān)系不會(huì)打入中?,F(xiàn)在我們直接運(yùn)行命令實(shí)現(xiàn)與上面相同的功能。 源碼地址:https://github.com/silence717/webpack2-demos webpack在你的應(yīng)用中是一個(gè)模塊打包工具。webpack可以簡(jiǎn)化工作流,快速構(gòu)建一個(gè)應(yīng)用...

    niceforbear 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記(二)

    摘要:例如現(xiàn)在的入門學(xué)習(xí)手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學(xué)習(xí)手記一,主要是介紹了的核心概念,是整個(gè)學(xué)習(xí)過(guò)程的基礎(chǔ)知識(shí)。新生成的類似如下入門學(xué)習(xí)手記因?yàn)樯傻膬?nèi)容過(guò)多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 最近開始想要維護(hù)一個(gè)個(gè)人的公眾...

    Joyven 評(píng)論0 收藏0
  • 庫(kù),組件,框架 - 收藏集 - 掘金

    摘要:哈哈,我理解,架構(gòu)就是骨架,如下圖所示譯年月個(gè)有趣的和庫(kù)前端掘金我們創(chuàng)辦的使命是讓你及時(shí)的了解開發(fā)中最新最酷的趨勢(shì)。 翻譯 | 上手 Webpack ? 這篇就夠了! - 掘金譯者:小 boy (滬江前端開發(fā)工程師) 本文原創(chuàng),轉(zhuǎn)載請(qǐng)注明作者及出處。 原文地址:https://www.smashingmagazine.... JavaSrip... 讀 Zepto 源碼之代碼結(jié)構(gòu) - ...

    tommego 評(píng)論0 收藏0
  • 個(gè)人分享--web前端學(xué)習(xí)資源分享

    摘要:前言月份開始出沒(méi)社區(qū),現(xiàn)在差不多月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過(guò)的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒(méi)社區(qū),現(xiàn)在差不多9月了,按照工作的說(shuō)法,就是差不多過(guò)了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來(lái)說(shuō),差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...

    sherlock221 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

TIGERB

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<