Webpack4.x 入門

概覽

新建項目

npm init -y

安裝webpack & webpack-cli

(c)npm install -D webpack
(c)npm install -D webpack-cli

# 查看webpack版本
(npx )webpack --version

試打包

src/index.js

document.write('Hello Webpack -Mazey')

dist/index.html

<!doctype html>
<html>
    <head>
        <title>Start Webpack</title>
    </head>
    <body>
        <script src="bundle.js"></script>
    </body>
</html>

webpack.config.js

const path = require('path')

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

項目命令行運行:

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

# 出現
Hash: 1ae48c1f7dc49168e983
Version: webpack 4.6.0
Time: 63ms
Built at: 2018-05-03 14:37:02
    Asset      Size  Chunks             Chunk Names
bundle.js  2.84 KiB    main  [emitted]  main
Entrypoint main = bundle.js
[./src/index.js] 38 bytes {main} [built]

此時 dist/ 下多了一個 bundle.js 文件, 打開 dist/index.html 出現 Hello Webpack -Mazey

在package.json定製腳本

{
  // ...
  "scripts": {
    "dev": "webpack --config webpack.config.js --mode development",
    "build": "webpack --mode production"
  },
  // ...
}


# or

{
  // ...
  "scripts": {
    "dev": "webpack-dev-server --devtool eval --progress --colors",
    "deploy": "NODE_ENV=production webpack -p"
  },
  // ...
}

然後命令行運行 npm run dev 便等於 webpack --config webpack.config.js --mode development

一、入口[entry]

語法

1.單個入口語法

entry: string|Array<string>

示例:

// ...
entry: './src/index.js'
// ...

# 等於

// ...
entry: {
    main: './src/index.js'
}
// ...

2.對象語法

entry: {[entryChunkName: string]: string|Array<string>}

示例:

// ...
entry: {
    app: './src/app.js',
    vendors: './src/vendors.js'
}
// ....

二、輸出[output]

語法

// ...
output: {
    filename: <output filename>,
    path: <path>
}
// ...
  • filename: 用於輸出文件的文件名。
  • path: 目標輸出目錄的絕對路徑。

示例:

const path = require('path')

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

module.exports = config

若配置多個入口,爲保證每個文件具有唯一名稱,需要用到佔位符

// ...
filename: '[name].js',
// ...

三、模式[mode]

語法

mode: string
  • development: 會將 process.env.NODE_ENV 的值設爲 development。啓用 NamedChunksPlugin 和 NamedModulesPlugin。
  • production: 會將 process.env.NODE_ENV 的值設爲 production。啓用 FlagDependencyUsagePlugin, FlagIncludedChunksPlugin, ModuleConcatenationPlugin, NoEmitOnErrorsPlugin, OccurrenceOrderPlugin, SideEffectsFlagPlugin 和 UglifyJsPlugin。

設置 模式 後則不需要在命令後帶上 --mode development

四、載入器?[loader]

語法

module: {
    rules: [
      { test: <.*>, use: <loader> },
      { test: <.*>, use: <loader> }
    ]
}
  • test: 標識出應該被對應的 loader 進行轉換的某個或某些文件。
  • use: 表示進行轉換時,應該使用哪個 loader。

示例:

const path = require('path')

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

module.exports = config

碰到“在 require()/import 語句中被解析爲 .css 的路徑”時,打包之前,先使用 css-loader 轉換一下。

五、插件[plugins]

語法

const <PluginName> = require(<plugin-name>)
// ...
plugins: [
    new <PluginName>({
        <attribute>: <value>
    })
]

想要使用一個插件,你只需要 require() 它,然後把它添加到 plugins 數組中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章