国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

webpackv4從dev到prd的詳細步奏

來源:懂視網 責編:小采 時間:2020-11-27 19:56:16
文檔

webpackv4從dev到prd的詳細步奏

webpackv4從dev到prd的詳細步奏:這次給大家帶來webpack v4 從dev到prd的詳細步奏,webpack v4從dev到prd的注意事項有哪些,下面就是實戰案例,一起來看一下。概述本月迎來了 v4 正式版的發布,本文用于學習新特性和總結開發必用plugin & loader,從dev到prd,走你~Big
推薦度:
導讀webpackv4從dev到prd的詳細步奏:這次給大家帶來webpack v4 從dev到prd的詳細步奏,webpack v4從dev到prd的注意事項有哪些,下面就是實戰案例,一起來看一下。概述本月迎來了 v4 正式版的發布,本文用于學習新特性和總結開發必用plugin & loader,從dev到prd,走你~Big
這次給大家帶來webpack v4 從dev到prd的詳細步奏,webpack v4從dev到prd的注意事項有哪些,下面就是實戰案例,一起來看一下。

概述

本月迎來了 v4 正式版的發布,本文用于學習新特性和總結開發必用plugin & loader,從dev到prd,走你~

Big changes

Environment

Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.

Usage

You have to choose (mode or --mode) between two modes now: production or development

本次新版本中引入了 mode 配置項,開發者可在 none,development(開發 ) 以及 production(產品)三種模式間選擇。該配置項缺省情況下默認使用 production 模式。

  1. development 模式給你極致的開發體驗,包含瀏覽器調試相關工具,極快的增量編譯,豐富全面的報錯信息...

  2. production 模式則包含大量發版優化,代碼壓縮,絲般潤滑的運行時優化,開發相關代碼的排除,易用,etc.

  3. none 不使用預設,等于老版本中全部自己配置的原始狀態。

eg:

webpack --mode development

Usage

  1. Some Plugin options are now validated

  2. CLI has been move to webpack-cli, you need to install webpack-cli to use the CLI

  3. The ProgressPlugin (--progress) now displays plugin names

  4. At least for plugins migrated to the new plugin system

新版中將 webpack 命令行工具拆分到單獨的倉庫中,所以需要額外安裝 webpack-cli。

npm init -y //初始化項目
npm install webpack webpack-cli -D //安裝webpack webpack-cli 依賴
npx webpack --mode development // npx可以直接運行node_modules/.bin目錄下面的命令

或者通過配置package.json的script build

"scripts": {
 "build": "webpack --mode development",
},

加載loader方法總結

use

module: {
 rules:[
 { 
 test: /\.css$/,
 use: ['style-loader','css-loader']
 }
 ]
}

css-loader用來解析處理CSS文件中的url路徑,要把CSS文件變成一個模塊

多個loader是有順序要求的,從右往左寫,因為轉換的時候是從右往左轉換

此插件先用css-loader處理一下css文件,再用style-loader把CSS文件變成style標簽插入head中

loader

module: {
 rules:[
 {
 test: /\.css$/,
 loader: ["style-loader", "css-loader"]
 },
 ]
}

use+loader

module: {
 rules:[
 {
 test: /\.css$/,
 use:[
 { loader:"style-loader"},
 { 
 loader: 'css-loader',
 options: {sourceMap: true}
 }
 ]
 }
 ]
}

這三種loader的寫法,最后打包的結果相同

loader中的options配置項可以用"?"跟在加載器后面

eg:

{ 
 test: /\.jpeg$/, 
 use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=output/', 
}

為以下配置的簡寫

{ 
 test: /\.jpeg$/, 
 use: {
 loader:'url-loader',
 options:{
 limit:1024,
 name:[path][name].[ext],
 outputPath:img/
 publicPath:output/'
 }
 }
}

開發必備的loader&plugins

  1. css-loader

  2. babel-loader

講ES6代碼轉換為ES5

{
 test: /\.js/,
 use: {
 loader: 'babel-loader',
 query: {
 presets: ["env", "stage-0", "react"]
 }
 }
},

babel-loader的預設可以添加在query中,也可以在項目根目錄添加 .babelrc 文件

.babelrc
{
 "presets": [
 "env",
 "stage-0",
 "react"
 ]
}

html-webpack-plugin

插件的基本作用就是生成html文件。原理很簡單:

將 webpack中entry配置的相關入口thunk 和 extract-text-webpack-plugin抽取的css樣式 插入到該插件提供的template或者templateContent配置項指定的內容基礎上生成一個html文件,具體插入方式是將樣式link插入到head元素中,script插入到head或者body中。

const HtmlWebpackPlugin = require('html-webpack-plugin');
new HtmlWebpackPlugin({
 template: './src/index.html',//指定產的HTML模板
 filename: `index.html`,//產出的HTML文件名
 title: 'index',
 hash: true,// 會在引入的js里加入查詢字符串避免緩存,
 minify: {
 removeAttributeQuotes: true
 }
}),

可以用 cnpm search html-webpack-plugin 查找想用loader的用法

less-loader sass-loader

優化向prd進發

提取公共的css代碼

它會將所有的入口 chunk(entry chunks)中引用的 *.css,移動到獨立分離的 CSS 文件。因此,你的樣式將不再內嵌到 JS bundle 中,而是會放到一個單獨的 CSS 文件(即 styles.css)當中。 如果你的樣式文件大小較大,這會做更快提前加載,因為 CSS bundle 會跟 JS bundle 并行加載。

npm i extract-text-webpack-plugin@next -D
const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
let cssExtract = new ExtractTextWebpackPlugin({
 filename: 'css/css.css',
 allChunks: true
});
module:{
 rules:[
 {
 test: /\.css$/,//轉換文件的匹配正則
 loader: cssExtract.extract({
 use: ["css-loader?minimize"]
 })
 },
 ]
}
plugins:[
 ...... ,
 + cssExtract
]

盡量減少文件解析,用resolve配置文件解析路徑,include

rules: {
 test: /\.js$/,
 loader:'babel-loader',
 include: path.resolve(dirname, 'src'),//只轉換或者編譯src 目錄 下的文件
 exclude: /node_modules/ //不要解析node_modules
}

resolve.mainFields

WebpackTest
|
|
| - src
| | - index.js
|
| - lib
| | - fetch
| |
| browser.js
| node.js
| package.json
|
| - webpack.config.js

當從 npm 包中導入模塊時(例如,引入lib下的庫),此選項將決定在 package.json 中使用哪個字段導入模塊。根據 webpack 配置中指定的 target 不同,默認值也會有所不同。

package.json

lib文件夾下的package.json中配置相對應模塊的key

{
 "name": "fetch",
 "version": "1.0.0",
 "description": "",
 "node": "./node.js",
 "browser": "./browser.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
}

webpack.config.js

在resolve解析對象中,加入lib的路徑

resolve: {
 extensions: ['.js', '.json'],
 mainFields: ['main', 'browser', 'node'],
 modules: [path.resolve('node_modules'), path.resolve('lib')]
}

index.js

這樣在index.js中引用第三方庫時,會去查找modules下的路徑中是否配置了所需的文件,知道在package.json中找到mainFields中的key對應文件,停止。

let fetch = require('fetch');
console.log(fetch);

打包后 console.log出的對象

如果交換mainFields中的key順序

mainFields: ['main', 'node','browser']

打包后 console.log出的對象,因為找到了key=node對應的文件就停止了查找

DllReferencePlugin

這個插件是在 webpack 主配置文件中設置的, 這個插件把只有 dll 的 bundle(們)(dll-only-bundle(s)) 引用到需要的預編譯的依賴。

新建webpack.react.config.js

const path = require('path');
const webpack = require('webpack')
module.exports = {
 entry: {
 react: ['react', 'react-dom']
 },
 output: {
 path: path.join(dirname, 'dist'),// 
輸出動態連接庫的文件名稱 filename: '[name]_dll.js', library: '_dll_[name]'//全局變量的名字,其它會從此變量上獲取到里面的模塊 }, // manifest 表示一個描述文件 plugins: [ new webpack.DllPlugin({ name: '_dll_[name]', path: path.join(dirname, 'dist', 'manifest.json')//最后打包出來的文件目錄和名字 }) ] }

在entry入口寫入要打包成dll的文件,這里把體積較大的react和react-dom打包

output中的關鍵是library的全局變量名,下文詳細說明dll&manifest工作原理

打包dll文件

webpack --config webpack.react.config.js --mode development

打包出來的manifest.json節選

打包出來的react_dll.js節選

可見manifest.json中的 name值就是

output:{
 library:_dll_react
}

manifest.json就是借書證,_dll_react就像圖書館書籍的條形碼,為我們最終找到filename為react_dll.js的參考書

使用“參考書”

在webpack.config.js中加入“借書證”

new webpack.DllReferencePlugin({
 manifest: path.join(dirname, 'dist', 'manifest.json')
})

再運行

webpack --mode development

打包速度顯著變快

打包后的main.js中,react,react-dom.js也打包進來了,成功~

import React from 'react';\n//import ReactDOM from 'react-dom';
 (function(module, exports, webpack_require) {
"use strict";
eval("\n\n//import name from './base';\n//import React from 'react';\n//import ReactDOM from 'react-dom';\n//import ajax from 'ajax';\n//let result = ajax('/ajax');\n\n//ReactDOM.render(<h1>{result}</h1>, document.getElementById('root'));\n// fetch fetch.js fetch.json fetch文件夾\n//let fetch = require('fetch');\n//console.log(fetch);\n//let get = require('../dist/bundle.js');\n//get.getName();\nconsole.log('hello');\n\nvar name = 'zfpx';\nconsole.log(name);\nif (true) {\n var s = 'ssssssssssssssssssssssss';\n console.log(s);\n console.log(s);\n console.log(s);\n console.log(s);\n}\n\n//# sourceURL=webpack:///./src/index.js?");
/***/ })
/******/ });

相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

推薦閱讀:

Vue項目應該怎么分環境打包

在React里使用Vuex的具體步驟

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

webpackv4從dev到prd的詳細步奏

webpackv4從dev到prd的詳細步奏:這次給大家帶來webpack v4 從dev到prd的詳細步奏,webpack v4從dev到prd的注意事項有哪些,下面就是實戰案例,一起來看一下。概述本月迎來了 v4 正式版的發布,本文用于學習新特性和總結開發必用plugin & loader,從dev到prd,走你~Big
推薦度:
標簽: 步驟 過程 教程
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 在线播放一区二区三区 | 亚洲 欧美 中文 日韩专区 | 91成人爽a毛片一区二区 | 精品国产一区二区三区成人 | 欧美激情综合亚洲一二区 | 日本不卡视频一区二区三区 | 亚洲欧美一区二区三区 | 免费一级毛片 | 亚洲热在线 | 国产精品久久成人影院 | 第一页亚洲| 国产成人精品一区二区三在线观看 | 亚洲高清视频一区 | 久久99精品一区二区三区 | 日韩不卡一区 | 国产浴室偷窥在线播放 | 国产在线精品一区二区 | 综合精品欧美日韩国产在线 | 国产精选免费视频 | 夜夜骑首页 | 国产精品第1页在线观看 | 国产一级做a爰片在线看 | 精品国产一级在线观看 | 国产成人精视频在线观看免费 | 亚洲欧美h| 视频在线一区二区 | 国产69精品久久久久777 | 欧美日本日韩aⅴ在线视频 欧美日韩91 | 最新亚洲 | 中国特黄毛片 | 伊人久久成人成综合网222 | 欧美国产日韩在线播放 | 日本v片免费一区二区三区 欧洲精品欧美精品 | 美国人禽交ooo | 永久在线观看 | 国产成人精品久久二区二区 | 精品国产乱码一区二区三区麻豆 | 国产成人99久久亚洲综合精品 | 成人精品在线视频 | 99精品国产免费久久国语 | 欧美成人禁片在线www |