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

資訊專欄INFORMATION COLUMN

webpack 4.x學(xué)習(xí)使用總結(jié)

ls0609 / 2785人閱讀

摘要:最近一周一直都在折騰一些項(xiàng)目中常用的記錄下來,以后免去簡單的配置再去查文檔。常規(guī)入口指示應(yīng)該使用哪個(gè)模塊,來作為構(gòu)建其內(nèi)部依賴圖的開始。把代碼轉(zhuǎn)換成,在使用語言中有介紹。擴(kuò)展語法,使用下一代,在使用中有介紹。用于忽略部分文件。

最近一周一直都在折騰webpack,一些項(xiàng)目中常用的記錄下來,以后免去簡單的配置再去查文檔。

常規(guī) 1.入口

指示 webpack 應(yīng)該使用哪個(gè)模塊,來作為構(gòu)建其內(nèi)部依賴圖的開始。
三種寫法:

entry: "./app/entry", // string | object | array
 ?entry: ["./app/entry1", "./app/entry2"],
 ?entry: {
 ? ?a: "./app/entry-a",
 ? ?b: ["./app/entry-b1", "./app/entry-b2"]
 ?},
2.出口

output 屬性告訴 webpack 在哪里輸出它所創(chuàng)建的 bundles

output:{
? ? path: path.resolve(__dirname, "dist"), // string,
? ? ??
? ? filename: "bundle.js", // string
? ? filename: "[name].js", // 用于多個(gè)入口點(diǎn)(entry point)(出口點(diǎn)?)
? ? filename: "[chunkhash].js", // 用于長效緩存
? ??
? ? publicPath: "",
? ? publicPath: "https://cdn.example.com/",
}
3. 模塊

開發(fā)者將程序分解成離散功能塊(discrete chunks of functionality),并稱之為_模塊_。

module:{
 ? ? ?rules:[{
 ? ? ? ?test: /.jsx?$/,
 ? ? ? ?include: [
 ? ? ? ? ?path.resolve(__dirname, "app")
 ? ? ? ?],
 ? ? ? ?exclude: [
 ? ? ? ? ?path.resolve(__dirname, "app/demo-files")
 ? ? ? ?],
 ? ? ? ?// 這里是匹配條件,每個(gè)選項(xiàng)都接收一個(gè)正則表達(dá)式或字符串
 ? ? ? ?// test 和 include 具有相同的作用,都是必須匹配選項(xiàng)
 ? ? ? ?// exclude 是必不匹配選項(xiàng)(優(yōu)先于 test 和 include)
 ? ? ? ?// 最佳實(shí)踐:
 ? ? ? ?// - 只在 test 和 文件名匹配 中使用正則表達(dá)式
 ? ? ? ?// - 在 include 和 exclude 中使用絕對(duì)路徑數(shù)組
 ? ? ? ?// - 盡量避免 exclude,更傾向于使用 include
 ? ? ? ?issuer: { test, include, exclude },
 ? ? ? ?// issuer 條件(導(dǎo)入源)
 ? ? ? ?enforce: "pre",
 ? ? ? ?enforce: "post",
 ? ? ? ?// 標(biāo)識(shí)應(yīng)用這些規(guī)則,即使規(guī)則覆蓋(高級(jí)選項(xiàng))
 ? ? ? ?loader: "babel-loader",
 ? ? ? ?// 應(yīng)該應(yīng)用的 loader,它相對(duì)上下文解析
 ? ? ? ?// 為了更清晰,`-loader` 后綴在 webpack 2 中不再是可選的
 ? ? ? ?// 查看 webpack 1 升級(jí)指南。
 ? ? ? ?options: {
 ? ? ? ? ?presets: ["es2015"]
 ? ? ? ?},
 ? ? ? ?// loader 的可選項(xiàng)
 ? ? ?}]
 ?}

? ## 4.插件(plugins)

? 插件是 webpack 的支柱功能。webpack 自身也是構(gòu)建于,你在 webpack 配置中用到的相同的插件系統(tǒng)之上

var webpack = require("webpack");
// 導(dǎo)入非 webpack 自帶默認(rèn)插件
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var DashboardPlugin = require("webpack-dashboard/plugin");
// 在配置中添加插件
plugins: [
 ?// 構(gòu)建優(yōu)化插件
 ?new webpack.optimize.CommonsChunkPlugin({
 ? ?name: "vendor",
 ? ?filename: "vendor-[hash].min.js",
 ?}),
 ?new webpack.optimize.UglifyJsPlugin({
 ? ?compress: {
 ? ? ?warnings: false,
 ? ? ?drop_console: false,
 ? ?}
 ?}),
 ?new ExtractTextPlugin({
 ? ?filename: "build.min.css",
 ? ?allChunks: true,
 ?}),
 ?new webpack.IgnorePlugin(/^./locale$/, /moment$/),
 ?// 編譯時(shí)(compile time)插件
 ?//html文件插件
 ?new HtmlWebpackPlugin({
 ? ? ?template: "index.html"
 ? ? ?title: "My App",
 ? ? ?filename: "assets/admin.html",
 ? ? ?chunks: ["app"],
 ? ? ?excludeChunks: [ "dev-helper" ]
 ? ?})
]
5 .開發(fā)中 Server(devServer)
devServer: {
 ? ?//proxy: { // proxy URLs to backend development server
 ? ?//  "/api": "http://localhost:3000"
 ? // },
 ? ?contentBase: path.join(__dirname, "public"), // boolean | string | array, static file location
 ? ?compress: true, // enable gzip compression
 ? ?//historyApiFallback: true, // true for index.html upon 404, object for multiple paths
 ? ?hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin
 ? ?//https: false, // true for self-signed, object for cert authority
 ? ?//noInfo: true, // only errors & warns on hot reload
 ? ?// ...
 ?},
 ? ? ?
devtool:"none"/"source-map"  // 生產(chǎn)環(huán)境
devtool:"eval-source-map"http://開發(fā)環(huán)境
7. externals
//配置
externals: {
 ?jquery: "jQuery"
}
//代碼中使用
import $ from "jquery";
$(".my-element").animate(...);
附錄 1. loader 分類列表 加載文件

raw-loader:把文本文件的內(nèi)容加載到代碼中去
file-loader:把文件輸出到一個(gè)文件夾中,在代碼中通過相對(duì) URL 去引用輸出的文件,
url-loader:和 file-loader 類似,但是能在文件很小的情況下以 base64 的方式把文件內(nèi)容注入到代碼中去,在
source-map-loader:加載額外的 Source Map 文件,以方便斷點(diǎn)調(diào)試,
svg-inline-loader:把壓縮后的 SVG 內(nèi)容注入到代碼中,
node-loader:加載 Node.js 原生模塊 .node 文件。
image-loader:加載并且壓縮圖片文件。
json-loader:加載 JSON 文件。
yaml-loader:加載 YAML 文件。

編譯模版

handlebars-loader:把 Handlebars 模版編譯成函數(shù)返回。
markdown-loader:把 Markdown 文件轉(zhuǎn)換成 HTML。

轉(zhuǎn)換腳本語言

babel-loader:把 ES6 轉(zhuǎn)換成 ES5,在3-1使用 ES6 語言中有介紹。
ts-loader:把 TypeScript 轉(zhuǎn)換成 JavaScript,在3-2使用 TypeScript 語言中有遇到。
awesome-typescript-loader:把 TypeScript 轉(zhuǎn)換成 JavaScript,性能要比 ts-loader 好。
coffee-loader:把 CoffeeScript 轉(zhuǎn)換成 JavaScript。

轉(zhuǎn)換樣式文件

css-loader:加載 CSS,支持模塊化、壓縮、文件導(dǎo)入等特性。
style-loader:把 CSS 代碼注入到 JavaScript 中,通過 DOM 操作去加載 CSS。
sass-loader:把 SCSS/SASS 代碼轉(zhuǎn)換成 CSS,在3-4使用 SCSS 語言中有介紹。
postcss-loader:擴(kuò)展 CSS 語法,使用下一代 CSS,在3-5使用 PostCSS中有介紹。
less-loader:把 Less 代碼轉(zhuǎn)換成 CSS 代碼。
stylus-loader:把 Stylus 代碼轉(zhuǎn)換成 CSS 代碼。

檢查代碼

eslint-loader:通過 ESLint 檢查 JavaScript 代碼,在 3-16檢查代碼中有介紹。
tslint-loader:通過 TSLint 檢查 TypeScript 代碼。
mocha-loader:加載 Mocha 測試用例代碼。
coverjs-loader:計(jì)算測試覆蓋率。

其它

vue-loader:加載 Vue.js 單文件組件,在3-7使用 Vue 框架中有介紹。
i18n-loader:加載多語言版本,支持國際化。
ignore-loader:忽略掉部分文件,在3-11構(gòu)建同構(gòu)應(yīng)用中有介紹。
ui-component-loader:按需加載 UI 組件庫,例如在使用 antd UI 組件庫時(shí),不會(huì)因?yàn)橹挥玫搅?Button 組件而打包進(jìn)所有的組件。

2.常用 Plugins? 用于修改行為

context-replacement-plugin:修改 require 語句在尋找文件時(shí)的默認(rèn)行為。
ignore-plugin:用于忽略部分文件。

用于優(yōu)化

extract-text-webpack-plugin:提取 JavaScript 中的 CSS 代碼到多帶帶的文件中
prepack-webpack-plugin:通過 Facebook 的 Prepack 優(yōu)化輸出的 JavaScript 代碼性能,
uglifyjs-webpack-plugin:通過 UglifyES 壓縮 ES6 代碼,
webpack-parallel-uglify-plugin:多進(jìn)程執(zhí)行 UglifyJS 代碼壓縮,提升構(gòu)建速度。
imagemin-webpack-plugin:壓縮圖片文件。
webpack-spritesmith:用插件制作雪碧圖。
ModuleConcatenationPlugin:開啟 Webpack Scope Hoisting 功能,
dll-plugin:借鑒 DDL 的思想大幅度提升構(gòu)建速度,
hot-module-replacement-plugin:開啟模塊熱替換功能。

其它

serviceworker-webpack-plugin:給網(wǎng)頁應(yīng)用增加離線緩存功能,在
stylelint-webpack-plugin:集成 stylelint 到項(xiàng)目中,
i18n-webpack-plugin:給你的網(wǎng)頁支持國際化。
provide-plugin:從環(huán)境中提供的全局變量中加載模塊,而不用導(dǎo)入對(duì)應(yīng)的文件。
web-webpack-plugin:方便的為單頁應(yīng)用輸出 HTML,比 html-webpack-plugin 好用。

配置匯總
var path = require("path")
var webpack = require("webpack")
//性能分分析
const WebpackMonitor = require("webpack-monitor");
const HtmlWebpackPlugin = require("html-webpack-plugin");
var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
  mode: " "production" | "development" | "none"",
  entry: {
 ?  a: "./app/entry-a",
 ?  b: ["./app/entry-b1", "./app/entry-b2"]
  },
  output: {
 ?  path: path.resolve(__dirname, "dist"), // string,
 ?  filename: "bundle.js", // string
 ?  filename: "[name].js", // 用于多個(gè)入口點(diǎn)(entry point)(出口點(diǎn)?)
 ?  filename: "[chunkhash].js", // 用于長效緩存
 ?  publicPath: "",
 ?  publicPath: "https://cdn.example.com/"
  },
  module: {
 ?  rules: [
 ? ?  {
 ? ? ?  test: /.js$/,
 ? ? ?  loader: "babel-loader",
 ? ? ?  exclude: /node_modules/
 ? ?  },
 ? ?  {
 ? ? ?  // 用正則去匹配要用該 loader 轉(zhuǎn)換的 CSS 文件
 ? ? ?  test: /.css$/,
 ? ? ?  use: ExtractTextPlugin.extract({
 ? ? ? ?  use: ["style-loader", "css-loader", "postcss-loader"],
 ? ? ? ?  include: path.join(__dirname, "./src"),
 ? ? ? ?  exclude: /node_modules/
 ? ? ?  })
 ? ?  },
 ? ?  {
 ? ? ?  test: /.(png|jpg|gif|svg|bmp|eot|woff|woff2|ttf)$/,
 ? ? ?  loader: {
 ? ? ? ?  loader: "file-loader",
 ? ? ? ?  options: {
 ? ? ? ? ?  name: "[name].[ext]?[hash]"
 ? ? ? ?  }
 ? ? ?  }
 ? ?  },
 ? ?  {
 ? ? ?  test: /.(png|jpg|gif|svg|bmp|eot|woff|woff2|ttf)$/,
 ? ? ?  loader: {
 ? ? ? ?  loader: "url-loader",
 ? ? ? ?  options: {
 ? ? ? ? ?  limit: 5 * 1024, // 圖片大小 > limit 使用file-loader, 反之使用url-loader
 ? ? ? ? ?  outputPath: "images/" // 指定打包后的圖片位置
 ? ? ? ?  }
 ? ? ?  }
 ? ?  },
 ? ?  {
 ? ? ?  // 暴露模塊
 ? ? ?  test: require.resolve("jquery"), // 注意 這里是require的resolve 方法
 ? ? ?  use: {
 ? ? ? ?  loader: "expose-loader",
 ? ? ? ?  options: "$"
 ? ? ?  }
 ? ?  }
 ?  ]
  },
  plugins: [
 ?  // 構(gòu)建優(yōu)化插件
 ?  new webpack.optimize.CommonsChunkPlugin({
 ? ?  name: "vendor",
 ? ?  filename: "vendor-[hash].min.js"
 ?  }),
 ?  new webpack.optimize.UglifyJsPlugin({
 ? ?  compress: {
 ? ? ?  warnings: false,
 ? ? ?  drop_console: false
 ? ?  }
 ?  }),
 ?  //提取css文件
 ?  new ExtractTextPlugin({
 ? ?  filename: "build.min.css",
 ? ?  allChunks: true
 ?  }),
 ?  new WebpackMonitor({
 ? ?  capture: true, // -> default "true"
 ? ?  target: "../monitor/myStatsStore.json", // default -> ?"../monitor/stats.json"
 ? ?  launch: true, // -> default "false"
 ? ?  port: 3030 // default -> 8081
 ?  }),
 ?  //html文件插件
 ?  new HtmlWebpackPlugin({
 ? ?  template: "index.html",
 ? ?  title: "My App",
 ? ?  filename: "assets/admin.html",
 ? ?  chunks: ["app"],
 ? ?  excludeChunks: ["dev-helper"]
 ?  })
  ],
  devServer: {
 ?  //proxy: { // proxy URLs to backend development server
 ?  // ?"/api": "http://localhost:3000"
 ?  // },
 ?  contentBase: path.join(__dirname, "public"), // boolean | string | array, static file location
 ?  compress: true, // enable gzip compression
 ?  //historyApiFallback: true, // true for index.html upon 404, object for multiple paths
 ?  hot: true // hot module replacement. Depends on HotModuleReplacementPlugin
 ?  //https: false, // true for self-signed, object for cert authority
 ?  //noInfo: true, // only errors & warns on hot reload
 ?  // ...
  },
  devtool: "eval-source-map", //開發(fā)環(huán)境
  //配置
  externals: {
 ?  jquery: "jQuery"
  }
};
其他 設(shè)置淘寶npm鏡像
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
vm 適配
cnpm i postcss-import postcss-url autoprefixer postcss-aspect-ratio-mini postcss-px-to-viewport postcss-write-svg postcss-cssnext cssnano postcss-viewport-units cssnano-preset-advanced -D
npm install viewport-units-buggyfill
var hacks = require("viewport-units-buggyfill/viewport-units-buggyfill.hacks");
require("viewport-units-buggyfill").init({
  hacks: hacks
});

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

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

相關(guān)文章

  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • React技術(shù)棧實(shí)現(xiàn)XXX點(diǎn)評(píng)App demo

    摘要:項(xiàng)目的架構(gòu)也是最近在各種探討研究。還求大神多指點(diǎn)項(xiàng)目技術(shù)總結(jié)技術(shù)棧項(xiàng)目結(jié)構(gòu)探究初體驗(yàn)關(guān)于項(xiàng)目中的配置說明項(xiàng)目簡單說明開發(fā)這一套,我個(gè)人的理解是體現(xiàn)的是代碼分層職責(zé)分離的編程思想邏輯與視圖嚴(yán)格區(qū)分。前端依舊使用技術(shù)棧完成。 項(xiàng)目地址:https://github.com/Nealyang/R...技術(shù)棧:react、react-router4.x 、 react-redux 、 webp...

    wslongchen 評(píng)論0 收藏0
  • 7月份前端資源分享

    摘要:更多資源請(qǐng)文章轉(zhuǎn)自月份前端資源分享的作用數(shù)組元素隨機(jī)化排序算法實(shí)現(xiàn)學(xué)習(xí)筆記數(shù)組隨機(jī)排序個(gè)變態(tài)題解析上個(gè)變態(tài)題解析下中的數(shù)字前端開發(fā)筆記本過目不忘正則表達(dá)式聊一聊前端存儲(chǔ)那些事兒一鍵分享到各種寫給剛?cè)腴T的前端工程師的前后端交互指南物聯(lián)網(wǎng)世界的 更多資源請(qǐng)Star:https://github.com/maidishike... 文章轉(zhuǎn)自:https://github.com/jsfr...

    pingan8787 評(píng)論0 收藏0
  • 2018年第33周-javeer對(duì)nodejs體會(huì)

    摘要:流程源處理源代碼,例如過濾任何值。工藝類從編譯后處理生成的文件,例如對(duì)類進(jìn)行字節(jié)碼增強(qiáng)。整合后的測試執(zhí)行集成測試后執(zhí)行所需的操作。校驗(yàn)運(yùn)行任何檢查以驗(yàn)證包裝是否有效并符合質(zhì)量標(biāo)準(zhǔn)。 nodejs和es6 nodejs的語法和es6不一樣,如模塊系統(tǒng),一個(gè)是CommonJS的require、一個(gè)是es6的import,寫模塊也不一樣。 nodejs的npm 我來理解,nodejs類似與j...

    xiongzenghui 評(píng)論0 收藏0
  • webpack 基礎(chǔ)與項(xiàng)目優(yōu)化實(shí)踐總結(jié)

    摘要:前言本文基于,主要涉及基本概念基本配置和實(shí)際項(xiàng)目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實(shí)踐部分基于自己的項(xiàng)目進(jìn)行優(yōu)化配置。同一文件中,修改某個(gè)影響其他。 前言:本文基于weboack4.x,主要涉及webpack4 基本概念、基本配置和實(shí)際項(xiàng)目打包優(yōu)化。關(guān)于概念方面參考官網(wǎng),常用配置來自于網(wǎng)絡(luò)資源,在文末有相關(guān)參考鏈接,實(shí)踐部分基于自己的項(xiàng)目進(jìn)行...

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

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

0條評(píng)論

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