DefinePlugin用來作定義。這就相似於咱們項目開發中的config文件同樣,在config文件中通常放的是系統代碼中的一些服務器地址之類的公共信息,咱們將這些信息提取出來單獨放在配置文件中,方便於後期的維護和管理。javascript
那DefinePlugin的功能和config這個文件相似,咱們能夠在它裏面定義一些公有信息,而後在代碼裏直接使用,接下來咱們來看詳細操做步驟。css
一、根據官網的介紹咱們來配置此插件,以下:java
二、而後在咱們的input.js文件中來使用這個變量SERVER_URL,以下:node
上述代碼可看到,咱們在代碼裏並無事先引入其餘信息,直接使用SERVER_URL這個變量的。react
三、到這一步,若是咱們進行打包處理的話會出現報錯信息,由於咱們的defineplugin插件是webpack所屬之下的,因此咱們要在配置文件的頂部還要引入webpack,以下:webpack
四、這樣一來,咱們再次執行打包處理後,就會生成結果文件,打開結果文件搜索fetch關鍵字可看到,在此處它請求的再也不是咱們定義的變量,而是一個具體的url地址,以下:web
五、本文的配置文件代碼和input.js入口文件代碼,完整版以下:sass
配置文件:服務器
const path=require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const webpack=require('webpack'); module.exports={ entry:'./input.js', output:{ path:path.resolve(__dirname,'dist'), filename:'output.bundle.js' }, mode:'development', plugins: [ new MiniCssExtractPlugin({ // Options similar to the same options in webpackOptions.output // both options are optional filename: '[name].css', chunkFilename: '[id].css', }), new webpack.DefinePlugin({ 'SERVICE_URL': JSON.stringify('https://dev.example.com') }), ], module:{ rules:[ { test:/\.(png|jpg|gif)$/i, use:[ { loader:'url-loader', options:{ limit:919200 } } ] }, { test: /\.(js|jsx)$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'], plugins: ['@babel/plugin-transform-react-jsx'] } } }, { test: /\.scss$/, use: [ // fallback to style-loader in development MiniCssExtractPlugin.loader, "css-loader", "sass-loader" ] } ] } };
入口文件:babel
const good='hello'; import HelloReact from './HelloReact.jsx'; import './test.scss'; import img1 from './img/01.png'; import img2 from './img/02.jpg'; //ES6中的語法 異步處理 async function sayHello(){ const result=await fetch(SERVICE_URL); console.log(result); } sayHello();
本文介紹了defineplugin插件的使用,此插件在咱們實際項目開發中運用的比較多,因此你們要花精力再研究研究哦。