<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        webpack中如何操作dev與prd

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:38:04
        文檔

        webpack中如何操作dev與prd

        webpack中如何操作dev與prd:這次給大家?guī)?lái)webpack中如何操作dev與prd,webpack中操作dev與prd的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。概述本月迎來(lái)了 v4 正式版的發(fā)布,本文用于學(xué)習(xí)新特性和總結(jié)開(kāi)發(fā)必用plugin & loader,從dev到prd,走你~Big chan
        推薦度:
        導(dǎo)讀webpack中如何操作dev與prd:這次給大家?guī)?lái)webpack中如何操作dev與prd,webpack中操作dev與prd的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。概述本月迎來(lái)了 v4 正式版的發(fā)布,本文用于學(xué)習(xí)新特性和總結(jié)開(kāi)發(fā)必用plugin & loader,從dev到prd,走你~Big chan
        這次給大家?guī)?lái)webpack中如何操作dev與prd,webpack中操作dev與prd的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。

        概述

        本月迎來(lái)了 v4 正式版的發(fā)布,本文用于學(xué)習(xí)新特性和總結(jié)開(kāi)發(fā)必用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 配置項(xiàng),開(kāi)發(fā)者可在 none,development(開(kāi)發(fā) ) 以及 production(產(chǎn)品)三種模式間選擇。該配置項(xiàng)缺省情況下默認(rèn)使用 production 模式。

        1. development 模式給你極致的開(kāi)發(fā)體驗(yàn),包含瀏覽器調(diào)試相關(guān)工具,極快的增量編譯,豐富全面的報(bào)錯(cuò)信息...

        2. production 模式則包含大量發(fā)版優(yōu)化,代碼壓縮,絲般潤(rùn)滑的運(yùn)行時(shí)優(yōu)化,開(kāi)發(fā)相關(guān)代碼的排除,易用,etc.

        3. none 不使用預(yù)設(shè),等于老版本中全部自己配置的原始狀態(tài)。

        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 命令行工具拆分到單獨(dú)的倉(cāng)庫(kù)中,所以需要額外安裝 webpack-cli。

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

        或者通過(guò)配置package.json的script build

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

        加載loader方法總結(jié)

        use

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

        css-loader用來(lái)解析處理CSS文件中的url路徑,要把CSS文件變成一個(gè)模塊

        多個(gè)loader是有順序要求的,從右往左寫(xiě),因?yàn)檗D(zhuǎn)換的時(shí)候是從右往左轉(zhuǎn)換

        此插件先用css-loader處理一下css文件,再用style-loader把CSS文件變成style標(biāo)簽插入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的寫(xiě)法,最后打包的結(jié)果相同

        loader中的options配置項(xiàng)可以用"?"跟在加載器后面

        eg:

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

        為以下配置的簡(jiǎn)寫(xiě)

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

        開(kāi)發(fā)必備的loader&plugins

        1. css-loader

        2. babel-loader

        講ES6代碼轉(zhuǎn)換為ES5

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

        babel-loader的預(yù)設(shè)可以添加在query中,也可以在項(xiàng)目根目錄添加 .babelrc 文件

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

        html-webpack-plugin

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

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

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

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

        less-loader sass-loader

        優(yōu)化向prd進(jìn)發(fā)

        提取公共的css代碼

        它會(huì)將所有的入口 chunk(entry chunks)中引用的 *.css,移動(dòng)到分離的 CSS 文件。因此,你的樣式將不再內(nèi)嵌到 JS bundle 中,而是會(huì)放到一個(gè)單獨(dú)的 CSS 文件(即 styles.css)當(dāng)中。 如果你的樣式文件大小較大,這會(huì)做更快提前加載,因?yàn)?CSS bundle 會(huì)跟 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$/,//轉(zhuǎn)換文件的匹配正則
         loader: cssExtract.extract({
         use: ["css-loader?minimize"]
         })
         },
         ]
        }
        plugins:[
         ...... ,
         + cssExtract
        ]

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

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

        resolve.mainFields

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

        當(dāng)從 npm 包中導(dǎo)入模塊時(shí)(例如,引入lib下的庫(kù)),此選項(xiàng)將決定在 package.json 中使用哪個(gè)字段導(dǎo)入模塊。根據(jù) webpack 配置中指定的 target 不同,默認(rèn)值也會(huì)有所不同。

        package.json

        lib文件夾下的package.json中配置相對(duì)應(yīng)模塊的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解析對(duì)象中,加入lib的路徑

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

        index.js

        這樣在index.js中引用第三方庫(kù)時(shí),會(huì)去查找modules下的路徑中是否配置了所需的文件,知道在package.json中找到mainFields中的key對(duì)應(yīng)文件,停止。

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

        打包后 console.log出的對(duì)象

        如果交換mainFields中的key順序

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

        打包后 console.log出的對(duì)象,因?yàn)檎业搅薻ey=node對(duì)應(yīng)的文件就停止了查找

        DllReferencePlugin

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

        新建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'),// 
        輸出動(dòng)態(tài)連接庫(kù)的文件名稱 filename: '[name]_dll.js', library: '_dll_[name]'//全局變量的名字,其它會(huì)從此變量上獲取到里面的模塊 }, // manifest 表示一個(gè)描述文件 plugins: [ new webpack.DllPlugin({ name: '_dll_[name]', path: path.join(__dirname, 'dist', 'manifest.json')//最后打包出來(lái)的文件目錄和名字 }) ] }

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

        output中的關(guān)鍵是library的全局變量名,下文詳細(xì)說(shuō)明dll&manifest工作原理

        打包dll文件

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

        打包出來(lái)的manifest.json節(jié)選

        打包出來(lái)的react_dll.js節(jié)選

        可見(jiàn)manifest.json中的 name值就是

        output:{
         library:_dll_react
        }

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

        使用“參考書(shū)”

        在webpack.config.js中加入“借書(shū)證”

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

        再運(yùn)行

        webpack --mode development

        打包速度顯著變快

        打包后的main.js中,react,react-dom.js也打包進(jìn)來(lái)了,成功~

        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?");
        /***/ })
        /******/ });

        相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注Gxl網(wǎng)其它相關(guān)文章!

        推薦閱讀:

        vue內(nèi)置指令方法與事件

        react做出頁(yè)面代碼分割、按需加載

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        webpack中如何操作dev與prd

        webpack中如何操作dev與prd:這次給大家?guī)?lái)webpack中如何操作dev與prd,webpack中操作dev與prd的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。概述本月迎來(lái)了 v4 正式版的發(fā)布,本文用于學(xué)習(xí)新特性和總結(jié)開(kāi)發(fā)必用plugin & loader,從dev到prd,走你~Big chan
        推薦度:
        標(biāo)簽: 使用 怎么 dev
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專題
        Top 主站蜘蛛池模板: 美女18毛片免费视频| 亚洲精品天堂成人片AV在线播放| 人体大胆做受免费视频| 又大又硬又爽免费视频| 国产精品亚洲а∨天堂2021| 免费国产成人午夜私人影视| 美女视频黄a视频全免费网站一区| 免费播放春色aⅴ视频| 立即播放免费毛片一级| 亚洲精品网站在线观看不卡无广告| 亚洲国产高清国产拍精品| 日韩在线a视频免费播放| 老司机午夜性生免费福利| 亚洲区小说区图片区| 不卡视频免费在线观看| 亚洲第一福利视频| 91免费人成网站在线观看18| 亚洲国产精品成人综合久久久| 99久久免费精品国产72精品九九| 亚洲欧洲精品成人久久曰| 亚洲成A人片在线观看中文| 中文字幕视频在线免费观看| 亚洲天堂视频在线观看| 成年轻人网站色免费看| 一区二区视频在线免费观看| 亚洲福利在线视频| 一个人看的www在线观看免费| 特黄aa级毛片免费视频播放| 国产av无码专区亚洲av桃花庵| 免费能直接在线观看黄的视频 | 中文字幕精品三区无码亚洲| 国产男女猛烈无遮挡免费网站 | 国产精品嫩草影院免费| 中文字幕免费视频精品一| 亚洲精品视频在线观看免费| 国产美女做a免费视频软件| 99在线视频免费观看| 亚洲乱码一二三四区乱码| 亚洲日韩在线第一页 | 最近中文字幕mv免费高清电影| 人成午夜免费大片在线观看|