隨我來,去看看webpack!(
爲時未晚
)
============》初版(較淺顯的知識,懂得可忽略本文)
(粗略代過)
(舉例介紹)
(基礎服務)
(初步認識)
mkdir webpack_demo && cd webpack_demo // 新建一個文件 並進入更目錄 `mkdir 是linux命令` npm init -y // 初始一個packjage.json文件 -y 表示跳過詢問步驟... //安裝webpack npm install webpack --save-dev // 添加webpack-cli依賴到"devDependencies" //webpack4.0+ 須要安裝webpack-cli npm install webpack-cli --save-dev // 添加webpack-cli依賴到"devDependencies"
//生成以下目錄 ├── package.json ├── src //源目錄(輸入目錄) │ ├── index.js ├── dist // 輸出目錄 │ ├── index.html
// 修改 `dist/index.html` < !DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>webpack_demo</title> </head> <body> <script src="main.js"></script> //爲何是main.js下面會解釋 </body> </html> //修改`src/index.js ` function component() { var element = document.createElement('div'); element.innerHTML = "整一個盒子" return element; } document.body.appendChild(component());
npx webpack
(Node 8.2+ 版本提供的 npx 命令)
node node_modules/.bin/webpack
(8.2-版本)
入口起點
,而後 輸出 爲 main.js
.打開dist/index.html 你將會看到
整一個盒子幾個字樣~
//生成以下目錄 ├── package.json + |── webpack.config.js //webpack配置文件 ├── src //源目錄(輸入目錄) │ ├── index.js ├── dist // 輸出目錄 │ ├── index.html
先介紹一個Lodash
庫 它是一個一致性、模塊化、高性能
的 JavaScript 實用工具庫 模塊化處理很是適合值操做和檢測
(說白了就是webpack用了我也試試...
)
lodash相關文檔
npm install lodash --save //非僅在開發的時候使用的依賴 就是須要打包到生產環境的包 不加-dev
css
// src/index.js import _ from 'lodash'; function component() { var element = document.createElement('div'); element.innerHTML = _.join(['lodash','webpack'],''); //join將 array 中的全部元素轉換爲由''分隔的字符串 其它函數能夠本身實踐 return element; }
打開index頁面輸出 loadshwebpack
//webpack.config.js const path = require('path'); module.exports = { entry: './src/index.js', //入口 output: { //出口 filename: 'main.js', //打包以後腳本文件名稱 path: path.resolve(__dirname, 'dist') //路徑指向執行 js 文件的絕對路徑 此處爲/dist } };
執行
npx webpack --config webpack.config.js (把以前dist目錄下main.js刪除)
新的腳本生成(其實沒多大變化..)
// 配置一下package.json "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack" //添加此行命令 下次執行打包就是 npm run build 至關於上面的npx webpack --config webpack.config.js }, // 資源的配置 css 圖片 js等等.. 舉例 css 圖片
npm install --save-dev style-loader css-loader
css的loader
npm install --save-dev file-loader
file(圖片)對象的 loader
//生成以下目錄 ├── package.json + |── webpack.config.js //webpack配置文件 ├── src //源目錄(輸入目錄) │ ├── index.js + │ ├── index.css + │ ├── icon.jpg ├── dist // 輸出目錄 │ ├── index.html
//修改webpack.config.js const path = require('path'); //path路徑模塊 module.exports = { entry: './src/index.js', //入口 output: { //出口 filename: 'main.js', path: path.resolve(__dirname, 'dist') }, module: { rules: [ { test: /\.css$/, //檢測正則匹配.css結尾的文件 use: [ //使用倆個loader 'style-loader', 'css-loader' ] }, { test: /\.(png|svg|jpg|gif)$/, //正則匹配.png svg jpg gif結尾的文件 use: [ //使用file-loader 'file-loader' ] } ] } }; //修改src/index.css div{ color:red; } //修改src/index.js import _ from 'lodash'; import "./index.css"; import Icon from './icon.jpg'; function component() { var element = document.createElement('div'); element.innerHTML = _.join(['loadsh', 'webpack'], ' '); var myIcon = new Image(); myIcon.src = Icon; element.appendChild(myIcon); return element; } document.body.appendChild(component());
npm run build(刪除以前的dist目錄下main.js) 你會看紅字和圖片
以上就是資源管理的簡短介紹
npm install --save-dev html-webpack-plugin 安裝html-webpack-plugin模塊
模塊用到功能:
1: 動態添加每次compile後 js css 的hash
2: 可配置多頁面 單頁面 這些
3: 其它沒涉及到
npm install clean-webpack-plugin --save-dev 清除dist文件夾(每次刪除麻煩了..)
配置一下
//修改目錄 ├── package.json |── webpack.config.js //webpack配置文件 ├── src //源目錄(輸入目錄) + │ ├── app.js + │ ├── print.js │ ├── index.css │ ├── icon.jpg ├── dist // 輸出目錄 │ ├── index.html
//webpack.config.js =============================================== const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); module.exports = { entry: { app: './src/index.js', print: './src/print.js' }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ title: 'webpack_demo' }) ], module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.(png|svg|jpg|gif)$/, use: [ 'file-loader' ] } ] } }; //修改src/index.js =================================================== import _ from 'lodash'; //引入lodash模塊 import "./index.css"; // index.css import Icon from './icon.jpg'; // 圖片 import printMe from "./print.js" // printJS function component() { var element = document.createElement('div'); //建立一個元素 element.innerHTML = _.join(['loadsh', 'webpack'], ' '); // lodash中_.join方法 var myIcon = new Image(); //建立一個圖片 myIcon.src = Icon; //src賦值 element.appendChild(myIcon); //追加圖片 var btn = document.createElement('button'); //建立按鈕 btn.innerHTML = 'Click me and check the console!'; //內容賦值 btn.onclick = printMe; //添加事件 element.appendChild(btn); //追加元素 return element; } document.body.appendChild(component()); //追加元素到body中 //修改src/print.js ========================================== export default function printMe() { console.log('from print.js'); }
npm run build 會發現基本webpack的配置以後 ,有點模樣(意思)了
打開頁面index.html正常訪問
npm install --save-dev webpack-dev-server
"webpack-dev-server" 爲你提供了一個簡單的 web 服務器,而且可以實時從新加載
//修改webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const webpack = require('webpack'); module.exports = { entry: { app: './src/index.js' }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }, devServer: { contentBase: './dist' }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ title: 'webpack_demo' }) ], module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.(png|svg|jpg|gif)$/, use: [ 'file-loader' ] } ] } }; //修改package.json ... "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack-dev-server --open", //start命令 "build": "webpack" }, ...
npm run start 本地起了8080端口的服務,你也能夠看到本身的頁面
//修改webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const webpack = require('webpack'); module.exports = { entry: { app: './src/index.js' }, output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') }, devServer: { contentBase: './dist', hot: true }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ title: 'webpack_demo' }), new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin() ], module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader' ] }, { test: /\.(png|svg|jpg|gif)$/, use: [ 'file-loader' ] } ] } };
npm run start 運行http://localhost:8080/ 而後你去修改print js的console(或者添加其餘代碼) 會發現命令行輸出updated. Recompiling... 字樣
這就是簡單的實現了熱更新
本文只是大概從幾個demo來對於webpack的基礎概念 入口entry 出口 output
loader
plugins mode(沒有直面涉及)
幾大模塊的梳理於實踐,讓你們對於webpack不在那麼陌生!html
後續文章會從更深刻的角度去學習webpack! 暫定下週1 發表文章(內容 詳細介紹
hot
實現一個簡易的vue-cli
等等)vuedemo的代碼我會同步 github
第二版 : webpack構建一個簡易的my-vue-cli