06Vue的前端工程化

Vue的前端工程化


一 模塊化規(guī)范

1.1模塊化規(guī)范舉例

  • 瀏覽器端JS模塊化規(guī)范:AMD宰僧,CMD
  • 服務器端JS模塊化規(guī)范:CommonJS
  • 大一統的模塊化規(guī)范:ES6
    • 每個js文件都是獨立的模塊
    • 導入模塊成員使用import關鍵字
    • 暴露模塊成員使用export關鍵字

1.2 babel

  1. 加載babel的模塊
npm install --save-dev @babel/core @babel/cli @babel/preset-env  
@babel/node
npm install --save @babel/polyfill

  1. 創(chuàng)建 babel.config.js 文件
const presets = [
    ["@babel/env",{
        targets:{
            edge: "17",
            firefox: "60",
            chrome: "67",
            safari: "11.1"
        }
    }]
]

module.exports = {presets};
  1. 通過 npx babel-node index.js 執(zhí)行代碼
npx babel-node .\index.js

1.3 默認導出和默認導入

  • 默認導出語法 export default 只允許使用一次
  • 若沒有 export default 則默認導入一個空對象

實例:

  1. 導出模塊 m1.js
let a = 10
let b = 20
let c = 30

function show(){
    console.log("Hello World")
}

export default {
    a,
    b,
    show
}
  1. 導入模塊 index.js
import m1 from "./m1.js"

console.log(m1)
  1. 運行
npx babel-node index.js

1.4 按需導出與按需導入

  • 每個模塊可以使用多次按需導出
  • 按需導出和導入可以與默認導出和導入共同使用,互不影響

實例:

  1. 導出模塊 m1.js
let a = 10
let b = 20
let c = 30

function show(){
    console.log("Hello World")
}
//默認導出
export default {
    a,
    b,
    show
}
//按需導出
export let s1 = "yorick"
export let s2 = "tom"
export function sayHello(){
    console.log("Hello")
}
  1. 導入模塊 index.js
//m1為默認導入观挎,{}內的為按需導入
import m1,{s1,s2 as ss2,sayHello} from "./m1.js"

console.log(m1)
console.log(s1)
console.log(ss2)
console.log(sayHello)
  1. 運行
PS D:\study\code\test\vue> npx babel-node .\index.js
{ a: 10, b: 20, show: [Function: show] }    
yorick
tom
[Function: sayHello]

1.5 直接導入并執(zhí)行代碼

實例:

  1. 需要直接導入的模塊 m2.js
for(let i=0 ; i<3 ; i++){
    console.log(i)
}
  1. 導入模塊 index.js
import "./m2.js"
  1. 執(zhí)行
PS D:\study\code\test\vue> npx babel-node .\index.js
0
1
2

二 Webpack打包工具

2.1 webpack概述

image-20210128101239202.png

2.2 webpack基本使用

  1. 創(chuàng)建列表隔行變色項目
  • 新建空目錄琴儿,運行 npm init -y 初始化包管理配置
  • 新建 src 源代碼目錄
  • 在 src 目錄下 創(chuàng)建 index.html 首頁
  • 初始化首頁的結構
  • 運行 npm install jquery 安裝 jquery
  • 通過模塊化的形式實現列表隔行變色的效果(需要使用webpack解決es6兼容性問題)

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script src="./index.js"></script>
</head>
<body>
  <ul>
      <li>這是第1個li</li>
      <li>這是第2個li</li>
      <li>這是第3個li</li>
      <li>這是第4個li</li>
      <li>這是第5個li</li>
      <li>這是第6個li</li>
      <li>這是第7個li</li>
      <li>這是第8個li</li>
  </ul>
</body>
</html>

index.js

import $ from "jquery"

$(function(){
    $("li:odd").css("backgroundColor","pink")
    $("li:even").css("backgroundColor","lightblue")
})
  1. 在項目中安裝和配置webpack
  • 運行 npm install webpack webpack-cli -D 命令,安裝webpack
  • 在項目根目錄下嘁捷,創(chuàng)建名為 webpack.config.js 的配置文件造成,在文件中初始化構建模式
module.exports = {
    mode: "development" // development 為開發(fā)模式 production 為上線模式(壓縮混淆)
}
  • 在 package.json 中的 scripts 節(jié)點下,新增 dev 腳本
"scripts":{
    "dev": "webpack" //在script節(jié)點下的腳本普气,可通過 npm run 執(zhí)行
}
  • 將 index.html 中的src引入替換為webpack生成的文件
<script src="../dist/main.js"></script>
  • 在終端運行 npm run dev 命令谜疤,啟動 webpack 進行項目打包
PS D:\study\code\test\vue\webpack-project> npm run dev

> webpack-project@1.0.0 dev D:\study\code\test\vue\webpack-project
> webpack

asset main.js 322 KiB [emitted] (name: main)
runtime modules 931 bytes 4 modules
cacheable modules 281 KiB
  ./src/index.js 143 bytes [built] [code generated]
  ./node_modules/jquery/dist/jquery.js 281 KiB [built] [code generated]
webpack 5.18.0 compiled successfully in 296 ms
  1. 配置打包的入口和出口

默認約定:

  • 打包的入口文件:src -> index.js
  • 打包的出口文件:dist -> main.js

修改打包的入口和出口配置,在 webpack.config.js 中添加如下配置

const path = require("path")
module.exports = {
    mode: "development", // development 為開發(fā)模式 production 為上線模式(壓縮混淆)
    entry: path.join(__dirname,"./src/index.js"),
    output: {
        path: path.join(__dirname,"./dist"),
        filename: "bundle.js"
    }
}
  1. 配置webpack自動打包功能
  • 運行 npm install webpack-dev-server -D 命令现诀,安裝自動打包的工具
  • 修改 package.json -> scripts 中的 dev 命令
"scripts":{
    "dev": "webpack-dev-server" 
}
  • 將 src -> index.html 中的 script 引用路徑改為 "/bundle.js"
  • 運行 npm run dev 重新打包
  • 在瀏覽器 http://localhost:8080 查看自動打包效果

注意:版本的兼容問題夷磕,下方版本可以正常使用

"devDependencies": {
    "webpack": "^5.18.0",
    "webpack-cli": "^3.3.12",
    "webpack-dev-server": "^3.11.2"
  },
  1. 配置 html-webpack-plugin 生成預覽頁面
  • 運行 npm install html-webpack-plugin -D 命令,安裝生成預覽頁面的插件
  • 修改 webpack.config.js 文件頭部區(qū)域仔沿,添加配置信息:
const HtmlWebpackPlugin = require("html-webpack-plugin")
const htmlPlugin = new HtmlWebpackPlugin({
    template: "./src/index.html", //指定需要預覽的模板文件
    filename: "index.html" //指定生成文件的名稱
})
  • 修改 webpack.config.js 文件中向外暴露的配置對象坐桩,增加新的配置節(jié)點
module.exports = {
    plugins: [htmlPlugin] //plugins數值是webpack打包期間會用到的插件列表
}
  1. 配置自動打包的相關參數
// --open 打包完成后自動打開瀏覽器頁面
// --host IP地址
// --port 端口
"scripts": {
    "dev": "webpack-dev-server --open --host 127.0.0.1 --port 8848"
}

2.3 webpack的加載器

  1. loader的調用流程
image-20210129125229232.png
  1. 打包處理css文件
  • 運行 npm install style-loader css-loader -D 命令,安裝處理css文件的loader
  • 在webpack.config.js 的 module -> rules 數組中添加loader
// test 表示匹配的文件類型封锉,use表示調用的loader
// user數組中指定的loader加載順序是固定的绵跷,多個loader的調用順序是從后往前調用
module: {
    rules: [
        {test:/\.css$/,use:["style-loader","css-loader"]}
    ]
}
  1. 打包處理less文件
  • 運行 npm install less-loader less -D 命令
  • 在 webpack.config.js 的 module -> rules 數組中添加規(guī)則
module: {
    rules: [
        {test:/\.less$/,use:["style-loader","css-loader","less-loader"]}
    ]
}
  1. 打包處理scss文件
  • 運行 npm install sass-loader node-sass -D 命令
  • 在 webpack.config.js 的 module -> rules 數組中添加規(guī)則
module: {
    rules: [
        {test:/\.scss$/,use:["style-loader","css-loader","sass-loader"]}
    ]
}
  1. 配置postCSS 自動添加css的兼容性前綴
  • 運行 npm install postcss-loader autoprefixer -D 命令
  • 在根目錄下創(chuàng)建 postcss 的配置文件 postcss.config.js ,初始化配置
const autoprefixer = require("autoprefixer")
module.exports = {
    plugins: [autoprefixer] //掛載插件
}
  • 在 webpack.config.js 的 module -> rules 數組中成福,修改 css的loader規(guī)則
module: {
    rules: [
        {test:/\.css$/,use:["style-loader","css-loader","postcss-loader"]}
    ]
}
  1. 打包樣式表中的圖片和字體文件
  • 運行 npm install url-loader file-loader -D 命令
  • 在 webpack.config.js 的 module -> rules 數組中加入規(guī)則
// loader的?之后用來指定圖片的大小碾局,單位字節(jié),小于limit大小的圖片會被轉為 base64 圖片
module: {
    rules: [
        {test:/\.jpg|png|gif|bmp|ttf|eot|svg|woff|woff2$/,use:["url-loader?limit=100000"]}
    ]
}
  1. 打包處理js文件的高級語法部分
  • 安裝 babel 轉換器相關包 npm install babel-loader @babel/core @babel/runtime -D
  • 安裝 babel 語法插件包 npm install @babel/preset-env @babel/plugin-transform-runtime @babel/plugin-proposal-class-properties -D
  • 在根目錄下創(chuàng)建 babel 的配置文件 babel.config.js奴艾,初始化配置
module.exports = {
    presets: ["@babel/preset-env"],
    plugins: ["@babel/plugin-transform-runtime","@babel/plugin-proposal-class-properties"]
}
  • 在 webpack.config.js 的 module -> rules 數組中添加loader規(guī)則
module: {
    rules: [
        {test:/\.js$/,use:["babel-loader"],exclude: /node_modules/}
    ]
}

三 Vue單文件組件

3.1 Vue單文件組件的基本用法

<template>
    <div>
        <h1>App 根組件</h1>
    </div>
</template>

<script>
export default {
    data:function(){
        return {}
    },
    methods: {}
}
</script>

<style scoped>
h1{
    color: red;
}
</style>

3.2 webpack中配置 vue 組件的加載器

  • 運行 npm install vue-loader vue-template-compiler -D 命令
  • 在 webpack.config.js 配置文件中净当,添加 vue-loader 的配置項
const VueLoaderPlugin = require("vue-loader/lib/plugin")
module.exports = {
    module: {
        rules: [
            {test:/\.vue$/,use:["vue-loader"]}
        ]
    },
    plugins: [
        new VueLoaderPlugin()
    ]
}

3.3 在webpack中使用vue

  1. 運行 npm install vue -S 安裝 vue
  2. 在 src -> index.js 入口文件中,通過 import Vue from "vue" 導入vue的構造函數
  3. 創(chuàng)建vue的實例對象蕴潦,并指定控制的el區(qū)域
  4. 通過 render 函數渲染 App 根組件
import Vue from "vue"
import App from "../components/App.vue"

const vm = new Vue({
    el: "#app",
    // 通過 render 函數像啼,把指定的組件渲染到 el 區(qū)域
    render: h => h(App)
})

3.4 webpack的打包發(fā)布

在 package.json 文件配置打包命令

"scripts":{
    "build": "webpack -p"
}

四 Vue 腳手架

4.1 Vue腳手架的基本用法

  1. 安裝Vue腳手架
# 卸載之前版本
npm uninstall -g vue-cli
npm install -g @vue/cli
# 查看版本
vue -V
  1. 基于命令行構建vue項目
vue create my-project
  1. 基于ui構建vue項目
vue ui
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潭苞,隨后出現的幾起案子忽冻,更是在濱河造成了極大的恐慌,老刑警劉巖此疹,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僧诚,死亡現場離奇詭異,居然都是意外死亡蝗碎,警方通過查閱死者的電腦和手機振诬,發(fā)現死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衍菱,“玉大人赶么,你說我怎么就攤上這事〖勾” “怎么了辫呻?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琼锋。 經常有香客問我放闺,道長,這世上最難降的妖魔是什么缕坎? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任怖侦,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘匾寝。我一直安慰自己搬葬,他們只是感情好,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布艳悔。 她就那樣靜靜地躺著急凰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猜年。 梳的紋絲不亂的頭發(fā)上抡锈,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音乔外,去河邊找鬼床三。 笑死,一個胖子當著我的面吹牛杨幼,可吹牛的內容都是我干的撇簿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼推汽,長吁一口氣:“原來是場噩夢啊……” “哼补疑!你這毒婦竟也來了?” 一聲冷哼從身側響起歹撒,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎暖夭,沒想到半個月后锹杈,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡迈着,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年竭望,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裕菠。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡咬清,死狀恐怖,靈堂內的尸體忽然破棺而出奴潘,到底是詐尸還是另有隱情旧烧,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布画髓,位于F島的核電站掘剪,受9級特大地震影響,放射性物質發(fā)生泄漏奈虾。R本人自食惡果不足惜夺谁,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一廉赔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匾鸥,春花似錦蜡塌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽村象。三九已至笆环,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厚者,已是汗流浹背躁劣。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留库菲,地道東北人账忘。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像熙宇,于是被迫代替她去往敵國和親鳖擒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容

  • 一烫止、模塊化相關規(guī)范 1.模塊化概述 傳統開發(fā)模式的主要問題: 命名沖突蒋荚,文件依賴 通過模塊化解決上述問題: 模塊化...
    coder_shen閱讀 301評論 0 0
  • 1.模塊化的分類 A.瀏覽器端的模塊化 B.服務器端的模塊化 C.ES6模塊化 小結:推薦使用ES6模塊化,因為A...
    __method__閱讀 782評論 0 1
  • 今日目標 1.能夠了解模塊化的相關規(guī)范2.了解webpack3.了解使用Vue單文件組件4.能夠搭建Vue腳手架5...
    __method__閱讀 533評論 1 9
  • 1.模塊化的相關規(guī)范 1.能夠了解2.了解webpack3.了解使用Vue單文件組件4.能夠搭建Vue腳手架5.掌...
    Scincyc閱讀 659評論 0 0
  • 1. 模塊化的分類 瀏覽器端的模塊化AMD(Asynchronous Module Definition,異步模塊...
    Grandperhaps閱讀 508評論 0 3