Webpack進入了 4.x 版本,緊跟着對開發者的配置能力有了一些新的要求。今天咱們看一下 Webpack 4.x 下的配置工做該如何進行。javascript
安裝 npm 包,分爲全局安裝和本地安裝。區別是全局安裝後,能夠經過 webpack 命令直接執行 webpack 程序,以下:css
webpack -v
複製代碼
本地安裝完,接下來須要經過 npm 包路徑的形式執行 webpack 命令,以下:java
node node_modules/webpack/bin/webpack -v
//或者
node_modules/.bin/webpack -v
複製代碼
一般狀況,咱們通常都會同時進行全局安裝和本地安裝,至於你選用本地包仍是全局包,就看我的習慣了~總之,只要能找到正確的 webpack 路徑,都是可以正常編譯的。node
4.x 版本,webpack 安裝過程被拆分爲 webpack 和 webpack-cli 兩個包。react
npm install webpack webpack-cli -g
複製代碼
若是你想追求速度,能夠經過安裝 cnpm 工具,從中國淘寶鏡像源進行安裝。webpack
cnpm install webpack webpack-cli -g
複製代碼
npm install webpack webpack-cli -D
複製代碼
或者web
cnpm install webpack webpack-cli -D
複製代碼
成功安裝以後,咱們能夠驗證下是否成功。npm
webpack -v
複製代碼
node_modules/.bin/webpack -v
//或者
node node_modules/webpack/bin/webpack -v
複製代碼
執行完可以正常打印版本號,說明安裝成功。json
webpack4.x 默認的入口文件是 src目錄下的 index.js 文件,默認的出口文件是dist 目錄下的 main.js 文件。瀏覽器
一、新建src目錄,增長一個 index.js 文件。
mkdir src & touch index.js
複製代碼
二、編輯 index.js,隨便輸入兩句代碼:
console.log('第一次')。
複製代碼
三、執行全局 webpack 命令或者執行本地 webpack 命令。
webpack
複製代碼
一句 webpack ,便可將 src 目錄下的 index.js 文件,編譯輸出到 dist 目錄下的 main.js 文件。
node node_modules/webpack/bin/webpack
複製代碼
可見,本地編譯須要些的命令比較長,由於須要按照路徑查找webpack。
webpack
命令的時候,實際上等價於webpack --mode production
,生產環境編譯方式會進行壓縮混淆操做。webpack --mode development
複製代碼
開發階段編譯後的文件是不會進行壓縮混淆操做的,可讀性比較好,調試起來也比較方便。
實際應用中,咱們的默認入口文件可能不是 src 下的 index.js 文件,所幸的是,webpack 支持配置入口文件和出口文件。
咱們能夠在 webpack 後增長一個參數表明入口文件webpack {入口文件}
。
webpack ./src/app.js
複製代碼
webpack 後的第一個參數表明入口文件,咱們將它改成 ./src/app.js,執行命令會發現,webpack 將該文件編譯到了默認的出口文件dist/main.js。
改變出口文件可使用以下命令實現:webpack {入口文件} -o {出口文件}
webpack ./src/app.js -o ./bundle/main.js
複製代碼
執行命令會發現,輸出文件是 bundle 目錄下的 main.js 。
和webpack 結合的最緊密的當屬 babel 了。babel 分爲 babel-core
和 babel-loader
兩個包。即便分紅了兩個包,這兩個包在版本使用上要注意配套。
請注意:babel-core 7.x 版本的包名是 @babel/core。
採用babel-loader 7.x 時,須要安裝 babel-preset-env 和 babel-preset-react插件,進行 ES6 和 React 的轉譯工做。
cnpm install babel-loader babel-core babel-preset-env babel-preset-react -D
複製代碼
採用babel-loader 8.x 時,須要安裝 @babel/preset-env 和 @babel/preset-react插件,進行 ES6 和 React 的轉譯工做。
cnpm install babel-loader @babel/core @babel/perset-env @babel/preset-react -D
複製代碼
配置好轉譯插件以後,咱們就可使用 ES6 開發 React 項目了,可是咱們仍是須要一些提升開發效率的工具,好比 webpack-dev-server,它可以
咱們看下webpack-dev-server 如何配置
module.exports = {
devServer: {
contentBase: path.join(__dirname, "/dist")
}
}
複製代碼
上例咱們只配置了一個屬性 contentBase,它表明了webpack-dev-server開啓的靜態服務器的根目錄,webpack-dev-server啓動一個服務器以後,默認端口是8080,當咱們訪問 localhost:8080 時,webpack-dev-server 會去 dist 目錄尋找靜態資源文件。
webpack-dev-server還有一些其餘配置,好比熱更新。
node_modules/.bin/webpack-dev-server --hot
複製代碼
固然 webpack-dev-server 還有不少特別棒的配置,這裏就不一一細說了,你們能夠去網上參考一些資料進行配置,若是有什麼不太懂的,能夠留言諮詢~~
如下是一個完整的 package.json。
{
"name": "webpack-demo",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "node_modules/.bin/webpack-dev-server --hot"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.4.5",
"@babel/preset-env": "^7.4.5",
"@babel/preset-react": "^7.0.0",
"babel-loader": "^8.0.6",
"css-loader": "^2.1.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"style-loader": "^0.23.1",
"webpack": "^4.32.2",
"webpack-cli": "^3.3.2",
"webpack-dev-server": "^3.5.1"
}
}
複製代碼
完整的 .babelrc
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
複製代碼
完整的 webpack-config.json 文件
var path = require('path');
module.exports = {
output: {},
module: {
rules: [
{
test: /(\.jsx|\.js)$/,
exclude: '/node_modules',
use: { loader: "babel-loader" }
},
{
test: /\.css$/,
exclude: '/node_modules',
use: [{
loader: 'style-loader'
}, { loader: "css-loader" }]
}
]
},
devServer: {
contentBase: path.join(__dirname, "/dist")
}
}
複製代碼
你們拷貝這三個配置文件以後,執行 npm install 便可安裝 webpack 4.x 的相關依賴了,省去了配置時的各類報錯信息,大大節約了配置時間,但願能給你們帶來幫助~