入口(entry)、出口(output)、加載器(loader)、插件(plugins)css
項目名不能有漢字,不能取名叫 webpackhtml
package.json
, 命令 : npm init -y
npm i -D webpack webpack-cli
webpack : 是 webpack 工具的核心包 webpack-cli : 提供了一些在終端中使用的命令 -D(--save-dev) : 表示項目開發期間的依賴,也就是 : 線上代碼中用不到這些包了
main.js
文件console.log('我就要被打包了,哦也');
package.json
的scripts
中,添加腳本"scripts": { "build": "webpack main.js" }, // webpack 是webpack-cli 中提供的命令, 用來實現打包的 // ./main.js 入口文件,要打包哪一個文件
npm run build
mode
"build" : "webpack ./main.js --mode development" // WARNING in configuration // The 'mode' option has not been set, webpack will fallback to 'production' for this value. // 若是沒有設置 mode 配置項, webpack 會默認提供 開發環境(production) // Set 'mode' option to 'development' or 'production' to enable defaults for each environment. // 項目開發的兩種環境 1. 開發環境 (development) : 開發過程就是開發環境 2. 生產環境 (production) : 線上環境, 也就是 : 項目作好了,發佈上線 生產環境下, 打包生產的js文件都是壓縮後的, 開發環境下代碼通常是不壓縮的
src/index.html
html => ul#list>li{我是 li \$}\*10
npm i jquery
, 而且引入 jquery
main.js
, 在 main.js 裏寫入// 使用ES6的模塊化語法 import $ from 'jquery' // 優勢 不用沿着路徑去找 $('#list > li:odd').css('backgroundColor', 'red') $('#list > li:even').css('backgroundColor', 'green') // 語法報錯
// 引入 main.js 會報錯,由於瀏覽器不支持這個import 的Es6語法 // npm run build 以後 // 引入 dist/main.js 後會ok,由於webpack 幫咱們轉化爲瀏覽器可以識別的es5語法了
//1. 若是index.html 中引入 jquery , 再引入 mian.js (沒有引入jquery了) => ok //2. 若是index.html 中沒有引入 jquery , 直接使用es6的模塊化語法 import , 引入main.js就會報錯 //3. 若是index.html 中沒有引入 jquery , 直接使用es6的模塊化語法 import , webapck打包出 dist/main.js 引入 dist/main.js ==> ok
爲何 dist文件下的main.js
文件裏的代碼忽然這麼多前端
看圖 (打包流程)node
code 記得保存一份jquery
src
源文件 : index.html
和main.js
1-命令行 2-配置項webpack
* "build" : "webpack ./mian.js" --mode development * npm run build * 通常狀況下 : 改成 * "build" : 入口 --output 出口 * "build": "webpack ./src/js/main.js --output ./dist/bundle.js --mode development", * * 驗證 : index.html 引入 bundle.js
第一步 : 項目`根目錄`下, 建立一個 `webpack.config.js`文件 (文件名固定死) 專門指定其餘文件 : --config webpack.XX.js 第二步 : 在 `webpack.config.js` 中,進行配置 // webpack 是基於 node的 , 因此配置文件符合 node 方式書寫配置 // 注意 : 不要再這個文件中使用ES6的的模塊化 import語法 // main.js裏可使用,是由於要經過webpack轉化爲es5的 // 而這個是webpack 的配置文件,,它是要轉化別人的,因此必需要經過 第三步 : 修改 `package.json` 中的 `scripts` , 腳本命令爲: "build": "webpack" 第四步 : 執行命令 : `npm run build`
const path = require('path') module.exports = { // 入口 entry: path.join(__dirname, './src/js/main.js'), // 出口 output: { // 出口目錄 path: path.join(__dirname, './dist'), filename: 'bundle.js' }, // 開發模式 mode: 'development' }
做用 : 1. 可以根據指定的模板文件 (index.html),自動生成一個新的 index.html,而且注入到dist文件夾下 2. 可以自動引入js文件
npm i html-webpack-plugin
第一步: 引入模塊 const htmlWebpackPlugin = require('html-webpack-plugin') 第二步: 配置 // 插件 plugins: [ // 使用插件 指定模板 new htmlWebpackPlugin({ template: path.join(__dirname, './src/index.html') }) ]
做用 : 爲使用 webpack 打包提供一個服務器環境es6
npm i -D webpack-dev-server
"dev" : "webpack-dev-server"
npm run dev
--open
--port 3001
--hot
( 整個頁面和整個項目打包 )演示: 在瀏覽器調試樣式的地方去掉ul的樣式(不加--hot改變文件的css樣式改變時候ul樣式又出現,由於全局刷新了,加上後局部更新) /* background: skyblue; */ 而後分別看 加 --hot 和 不加 --hot 的區別 從新運行腳本
// hot 不要寫在配置文件裏面,,否則的話還要配其餘插件麻煩 "dev" : "webpack-dev-server --hot", devServer : { open : true, port : 3001 }
npm run dev
==> 不會打包的 ,只會把項目放到服務器裏2.1 執行 : `npm run build` 對項目進行打包,生成dist文件 2.2 模擬本地服務器 : 安裝 : `npm i -g http-server` 2.3 把dist文件裏的內容放到服務器裏便可, 直接運行`http-server`
webpack 只能處理 js 文件,非 js(css.less.圖片.字體等)處理處理不了, 藉助 loader 加載器web
main.js
中引入 import '../css/index.css';
ul { style-list : none }面試
npm i -D style-loader css-loader
webpack.config.js
中,添加個新的配置項 module
module
中添加 loader
來處理 css
// loader module: { rules: [ //1.處理 css // 注意點 use執行loader 順序 從右往左 // css-loader : 讀取css文件內容,將其轉化爲一個模塊 // style-loader :拿到模塊, 建立一個style標籤,插入頁面中 { test: /\.css$/, use: ['style-loader', 'css-loader'] } ] }
import '../css/index.less';
npm i -D less-loader less style-loader css-loader
module->rules
less
ul { background-color: aqua; li { &:hover { color: yellow; } } }
配置 :npm
{ test :/\.less$/, use : ['style-loader','css-loader','less-loader'] },
設置背景圖片.cls {
width: 300px;
height: 300px;
background: url('../css/4.jpg');
background-size: 100%;
}
npm i -D url-loader file-loader
url-loader (推薦) 和 file-loader 二選一便可
// 處理圖片 { test : /\.(jpg|png)$/, use : ['url-loader'] },
原始: background-image: url(../images/1.jpg); 處理後: background-image: url(9c9690b56876ea9b4d092c0baef31bb3.jpg);
方式1 :{ test : /\.(jpg|png)$/, use : ['url-loader?limit=57417'] }, 方式2 : { test: /\.(jpg|png)$/, use: [ { loader: 'url-loader', options: { // 比57417這個小 => 轉化爲base64 // 大於等於這個57417值 => 不會轉base64 內部調用 file-loader 加載圖片 limit: 57417 } } ] },
準備字體圖標: 字體圖標文件 iconfont
或者 從阿里矢量圖標
裏下載
拷貝到項目中的 css 文件夾中
在 main.js 中引入 css 文件
import '../css/iconfont/iconfont.css'
使用 :
在 webpack.config.js 中配置
// 4. 處理字體圖標 { test:/\.(svg|woff|woff2|ttf|eot)$/,use:'url-loader'}
var o = { ...obj }
在谷歌上能夠,edge 就不能夠npm i -D babel-core babel-loader@7
npm i -D babel-preset-env babel-preset-stage-2
babel-polyfill與babel-plugin-transform-runtime
也是作兼容處理的,之前都是用這個,兼容更早的{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
.babelrc
{ "presets": [ "env", "stage-2" ], ----------- // 暫時不用 // 若是將來某一天真的用到了polify "plugins": [ ["transform-runtime", { "helpers": false, "polyfill": true, "regenerator": true, "moduleName": "babel-runtime" }]
var obj = { name: 'zs', age: 20 } var o = { ...obj } console.log(o)