欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

webpack4實(shí)現(xiàn)不同的導(dǎo)出類型

 更新時(shí)間:2019年04月09日 09:27:31   作者:可欣  
這篇文章主要介紹了webpack4實(shí)現(xiàn)不同的導(dǎo)出類型,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

webpack最基本的配置就是導(dǎo)出一個(gè)靜態(tài)的對(duì)象,但是由于我們業(yè)務(wù)比較復(fù)雜,往往需要?jiǎng)討B(tài)配置webpack以構(gòu)建目標(biāo)代碼。

幸運(yùn)的是,webpack為我們提供了動(dòng)態(tài)配置webpack文件的支持。

下面介紹一下webpack的多種配置類型。

1、導(dǎo)出為一個(gè)對(duì)象(Object)

webpack最常見的配置類型為導(dǎo)出一個(gè)對(duì)象,即

const path = require('path')
module.exports = {
 entry: './src/index.js',
 output: {
  filename: 'bundle.js',
  path: path.resolve(__dirname, 'dist')
 }
}

2、導(dǎo)出為一個(gè)函數(shù)(Function)

很明顯,導(dǎo)出為一個(gè)對(duì)象缺乏靈活性。若我們想要根據(jù)不同的開發(fā)環(huán)境構(gòu)建不一樣的代碼。此時(shí),webpack配置也應(yīng)該隨著改變。

所以,webpack支持我們導(dǎo)出一個(gè)函數(shù),這個(gè)導(dǎo)出函數(shù)的默認(rèn)參數(shù)為env和argv。其中,env為環(huán)境對(duì)象,我們可以通過命令行對(duì)其進(jìn)行配置(webpack可自動(dòng)讀取該配置),argv為命令行輸入?yún)?shù)的map。

(1)--env 參數(shù)支持各種各樣的配置:

Invocation Resulting environment notes
webpack --env prod "prod" env為String類型,賦值為prod
webpack --env.prod { prod: true } env為對(duì)象,prod是對(duì)象的屬性, 默認(rèn)為true
webpack --env.prod=1 { prod: 1 } env為對(duì)象,prod是對(duì)象的屬性,賦值為1
webpack --env.prod=foo { prod: "foo" } env為對(duì)象,prod是對(duì)象的屬性,賦值為foo
webpack --env.prod --env.min [ prod: true, min: true ] env為對(duì)象,prod和min是對(duì)象的屬性,默認(rèn)為true。--env命令可以多次使用,不會(huì)被覆蓋
webpack --env.prod --env min [{ prod: true }, "min"] env 為數(shù)組,第一個(gè)數(shù)組元素為對(duì)象,prod是其屬性,默認(rèn)為true。第二個(gè)數(shù)組元素為String,賦值為min
webpack --env.prod=foo --env.prod=bar { prod: ["foo", "bar"] } env為對(duì)象,prod是對(duì)象的屬性。prod是一個(gè)數(shù)組,第一個(gè)數(shù)組元素為"foo",第二個(gè)數(shù)組對(duì)象為"bar"。注意,即使這種情況下,prod值不會(huì)被覆蓋,而是轉(zhuǎn)化為數(shù)組。

(2)argv為webpack命令行參數(shù)的map。

例如,我們?cè)诿钚墟I入webpack --entry-filename=index,則在webpack配置文件中,我們可以通過argv["entry-filename"]來獲取命令行配置的值。即:

argv["entry-filename"] === "index"

(3)舉個(gè)例子:

const path = require('path')

module.exports = function (env, argv) {
 return {
  entry: './src/' + argv['entry-filename'] + '.js',
  output: {
   filename: 'bundle.js',
   path: path.resolve(__dirname, 'dist'),
  },
  devtool: env.prod ? 'source-map' : 'eval'
 }
}

在命令行中,我們需要自鍵入

webpack --env.prod --entry-filename=index

注意,凡是webpack配置文件中使用到的命令行參數(shù),例如argv["entry-filename"],均需要在命令行傳入,一個(gè)不能遺漏,否則webpack會(huì)報(bào)錯(cuò):Config did not export an object

3、導(dǎo)出為一個(gè)Promise對(duì)象

除了導(dǎo)出為一個(gè)函數(shù),webpack還支持我們異步獲取配置變量來配置相關(guān)文件。(真是很強(qiáng)大?。?/p>

為了體現(xiàn)異步獲取數(shù)據(jù)的過程,我們把webpack.config.js修改為以下內(nèi)容:

const path = require('path')
module.exports = () => {
 return new Promise((resolve, reject) => {
  setTimeout(() => {
   resolve({
    entry: './src/index.js',
    output: {
     filename: 'bundle.js',
     path: path.resolve(__dirname, 'dist')
    }
   })
  }, 1000)
 })
}

4、導(dǎo)出多個(gè)配置

修改webpack.config.js的內(nèi)容如下:

const path = require('path')

module.exports = [
 {
  name: 'index',
  entry: './src/index.js',
  output: {
   filename: 'index.js',
   path: path.resolve(__dirname, 'dist')
  },
  mode: 'production'
 },
 {
  name: 'main',
  entry: './src/main.js',
  output: {
   filename: 'main.js',
   path: path.resolve(__dirname, 'dist')
  }
 }
]

當(dāng)我們運(yùn)行webpack時(shí),以上多個(gè)配置都會(huì)被構(gòu)建出來。如果我們只想構(gòu)建其中一份代碼,那么只需要傳入--config-name參數(shù)即可:

webpack --config-name=index

webpack --config-name=main

如上所示,我們可以分別構(gòu)建出name為index、name為main的配置對(duì)象所配置的內(nèi)容。

以上配置常見的場景有:npm包利用不同的模塊語法構(gòu)建不同的輸出文件,供不同的項(xiàng)目進(jìn)行使用:

module.exports = [{
 output: {
  filename: './dist-amd.js',
  libraryTarget: 'amd'
 },
 name: 'amd',
 entry: './app.js',
 mode: 'production',
},{
 output: {
  filename: './dist-commonjs.js',
  libraryTarget: 'commonjs'
 },
 name: 'commonjs',
 entry: './app.js',
 mode: 'production',
}]

總而言之,webpack為我們提供了眾多靈活的配置解決方案。當(dāng)我們遇到復(fù)雜項(xiàng)目的時(shí)候,只要明確心中需求,大多數(shù)都能夠找到對(duì)應(yīng)的解決方案。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論