webpack模塊化開(kāi)發(fā)及配置問(wèn)題

webpack和gulp區(qū)別

1.gulp是工具鏈、構(gòu)建工具冰单』戏欤可以配合各種插件做jps.壓縮,css.壓縮诫欠,less編譯等涵卵,可以替代手工實(shí)現(xiàn)自動(dòng)化工作浴栽。
2.而webpack是文件打包工具,可以把項(xiàng)目的各種jps.文轿偎、css.文件等打包合并成一個(gè)或多個(gè)文件典鸡,主要用于模塊化方案,預(yù)編譯模塊的方案坏晦。
3.在定義和使用類(lèi)比中兩者都有各的用途椿每,同時(shí)webpack為初級(jí)編譯程序,gulp為高級(jí)編譯程序英遭,在功能上要比webpack應(yīng)用程序中多间护。
4.webpack可以很方便使用node_module、es6或者樣式注入等功能挖诸,作為最初級(jí)的功能定位性價(jià)比最高汁尺,webpack輸入輸出都以js為主,對(duì)html兼顧較少多律,可用組件不多很難達(dá)到可用的程度痴突。
5.gulp在編程方面較為復(fù)雜,但是可用的組件也會(huì)更多狼荞,手動(dòng)編譯的情況下耗時(shí)較長(zhǎng)辽装,同時(shí)此軟件不適合初級(jí)入門(mén)者使用。

常見(jiàn)的模塊化開(kāi)發(fā)

由于各個(gè)板塊之間需要傳遞數(shù)據(jù)相味,一般做法是封裝成匿名函數(shù)拾积,但是外不下更要再訪問(wèn)其他板塊的函數(shù)就很難了,然后就有了第二種做法丰涉,聲明一個(gè)對(duì)象拓巧,然后再對(duì)其添加內(nèi)容,再對(duì)其進(jìn)行導(dǎo)出



  • CommonJS(node)
  • AMD
  • CMD
  • ES6的Modules

跨域報(bào)錯(cuò)

  • 報(bào)錯(cuò)原因: A 網(wǎng)站的 javascript 代碼試圖訪問(wèn) B 網(wǎng)站,包括提交內(nèi)容和獲取內(nèi)容一死。由于安全原因,跨域訪問(wèn)是被各大瀏覽器所默認(rèn)禁止的肛度。
  • 解決方案
    解決方案一.: 在VScode里面安裝插件 live server,右擊 -> open with live server
    解決方案二: 自己建立一個(gè)http服務(wù)


    image.png
重點(diǎn)是ES6的模塊化操作

export是導(dǎo)出操作

  • 導(dǎo)出方式一
//導(dǎo)出方式一
export var a = 111;
export var sum = 222;
  • 導(dǎo)出方式二
//導(dǎo)出方式二
var a = 111;
var sum = 222;
export { a, sum }
  • 導(dǎo)出方式三(某些情況下投慈,一個(gè)模塊中包含某個(gè)的功能承耿,我們并不希望給這個(gè)功能命名,而且讓導(dǎo)入者可以自己來(lái)命名)


    image.png

導(dǎo)入

import { a, sum } from './aaa.js'
console.log(a, sum);
  • 導(dǎo)出函數(shù)
//導(dǎo)出函數(shù)
export function fn(text) {
  console.log(text);
}

導(dǎo)入函數(shù)

import { fn } from './aaa.js'
fn('你好啊')
  • 導(dǎo)出類(lèi)
//導(dǎo)出類(lèi)
export class persion {
  constructor(name, age) {
    this.name = name
    this.age = age
  }
  run() {
    console.log(this.name + '在奔跑');
  }
}

導(dǎo)入

import { persion } from './aaa.js'
var student = new persion()
student.name = '郭群博'
student.age = 18
student.run()

webpack

  • 是一個(gè)靜態(tài)模塊化打包工具伪煤,讓我們可能進(jìn)行模塊化開(kāi)發(fā)加袋,并且會(huì)幫助我們處理模塊間的依賴關(guān)系
    打包:比如壓縮圖片,將scss轉(zhuǎn)成css带族,將ES6語(yǔ)法轉(zhuǎn)成ES5語(yǔ)法锁荔,將TypeScript轉(zhuǎn)成JavaScript等等操作
  • 終端輸入:webpack ./src/main.js ./dist/bundle.js(webpack 入口文件 打包到的文件)
    每改變一次就要重新打包蟀给,模塊化思想可以混合使用

webpack的配置

image.png
  • 配置webpack.config.js文件
const path = require('path') //引入path包(需要下載)
module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'), //這個(gè)路徑必須是動(dòng)態(tài)的
    filename: 'bundle.js'
  },
}

然后在終端輸入webpack就能打包啦

  • 凡是在終端里面輸入webpack的蝙砌,都時(shí)用的全局webpack阳堕,配置下圖之后,終端輸入npm run build之后會(huì)按照 先局部后全局的順序 進(jìn)行打包

    image.png

  • 下載局部webpack npm install webpack@3.6.0 -save-dev

    image.png

webpack中使用css文件的處理

  • 配置webpack.config.js文件
const path = require('path') //引入path包(需要下載)
module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, 'dist'), //這個(gè)路徑必須是動(dòng)態(tài)的
    filename: 'bundle.js'
  },
  module: {
    rules: [{
      //正則表達(dá)式
      test: /\.css$/i,
      //css loader只負(fù)責(zé)加載
      //當(dāng)有多個(gè)loader的時(shí)候择克,會(huì)從右往左執(zhí)行
      use: ['style-loader', 'css-loader']
    }, ]
  },
}
  • 遇見(jiàn)bug并解決
    image.png

    報(bào)錯(cuò)原因:css-loader和style-loader的版本過(guò)高
    解決方法:
  1. 修改package.json里的版本信息


    image.png
  2. 終端輸入命令 npm install然后再輸入npm dev
  3. 重新進(jìn)行打包即可

報(bào)錯(cuò)解決

image.png

less-loader的使用以及配置

  • 下載對(duì)應(yīng)的包 npm install less less-loader --save-dev
  • 配置package.json文件


    image.png

圖片文件處 方法一:file-loader,方法二:url-loader(和file-loader類(lèi)似恬总,只是選擇性的將圖片進(jìn)行64base編碼)

  • npm install --save-dev url-loader@1.1.2
    當(dāng)圖片的大小小于limit的時(shí)候,他會(huì)通過(guò)base64編碼肚邢,這也是limit的作用
  • npm install --save-dev file-loader@3.0.1
    當(dāng)圖片大于limit的時(shí)候壹堰,會(huì)采用32位的哈希值命名圖片,
  • 讓圖片打包后的名字與打包前的名字相同的配置


    image.png
  • 我們整個(gè)程序是打包在dist文件夾下的骡湖,所以這里我們需要在路徑下再添加一個(gè)dist/
    image.png

    loader以及圖片名操作配置:
 {
        test: /\.(png|jpg|gif|jpeg)$/,
        use: {
          loader: 'url-loader',
          options: {
            limit: 8192,
//自動(dòng)在打包之后的文件夾下面建立一個(gè)image文件夾贱纠,并往里面打包圖片
            name: 'image/[name].[hash:8].[ext]'
          }
        }
      }

webpack5之后就支持asset module type(無(wú)需下載),使用方法:

加載圖片
base64

webpack插件plugin

  • npm下載
  • 導(dǎo)入配置文件:const { CleanWebpackPlugin } = require("clean-webpack-plugin")
  • 配置(和module在同一級(jí))
//每次打包前會(huì)刪除前一次打包的文件
  plugins: [
    new CleanWebpackPlugin()
  ]

方便調(diào)試的設(shè)置

module.exports = {
  //設(shè)置模式
  //development 開(kāi)發(fā)階段使用
  //production 準(zhǔn)備上市時(shí)使用
  mode: "development",
  //設(shè)置source-map,簡(jiǎn)歷打包之后的js文件的映射文件响蕴,方便調(diào)試代碼錯(cuò)誤的地方
  devtool: "source-map",

es6轉(zhuǎn)化成es5

babel作用谆焊,babel編譯器將我們的源代碼,轉(zhuǎn)換成瀏覽器可以直接識(shí)別的另一段源代碼----解析-轉(zhuǎn)換-生成

方法一

  • npm install --save-dev babel-loader@7.1.5 babel-core@6.26.3 babel-preset-es2015@6.24.1
    配置webpack.config.json文件
{
      test: /\.m?js$/,
      exclude: /(node_modules|bower_components)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['es2015']
        }
      }
    }

方法二:

*無(wú)需配置webpack

  • npm install @babel/core @babel/cli -D
  • 安裝插件:npm install @babel/plugin-transform-block-scoping -D
  • 插件:npm install @babel/plugin-transform-arrow-functions -D
  • 打包:npx babel demo.js --out-file test.js --plugins=@babel/plugin-transform-arrow-functions,@babel/plugin-transform-block-scoping

方法三

  • 由于配置過(guò)于麻煩浦夷,所以有了預(yù)設(shè)這一說(shuō)
  • 下載:npm install @babel/preset-env -D
  • npx babel demo.js --out-file test.js --presets=@babel/preset-env

vue版本報(bào)錯(cuò)

  • 原因


    image.png
  • 解決方案
    配置webpack.config.js文件


    image.png

el和template

  • 如果el和template都存在的話辖试,template會(huì)將el替換掉


    image.png
  • vscode中建立一個(gè).vue的文件,代碼不高亮劈狐,安裝插件:vetur(要安裝 0.31.1之前的)詳細(xì)原因:https://blog.csdn.net/jsjcmq/article/details/110926639

vue-loader

  • 下載 npm install vue-loader vue-template-compiler --save-dev
  • 修改版本
    image.png
  • 更新第三方包npm install
  • 配置webpack.config.js文件
      //配置vue-loader
      {
        test: /\.vue$/,
        use: ['vue-loader']
      }
  • 完成

Vue3的 .Vue文件打包

  • 新建Vue文件罐孝,并將邏輯的部分進(jìn)行導(dǎo)出


    image.png
  • 導(dǎo)入


    image.png
  • 配置
    npm install vue-loader@next -D
    處理template
    npm install @vue/compiler-sfc -D
{
        test: /\.vue$/,
        loader: "vue-loader"
      }

加載插件


image.png

使用插件


image.png

關(guān)于import導(dǎo)入文件名后綴省略的問(wèn)題

image.png
  • 在webpackage.config.js文件中的resolve屬性配置
    image.png

關(guān)于webpack配置plugins

  • 引入和配置(不用下載)


    image.png

將文件index.html打包到dist文件夾下

image.png
  • 安裝HtmlWebpackPlugin插件
    npm install html-webpack-plugin@3.2.0 --save-dev
  • 配置webpack.config.js文件


    image.png
  plugins: [new webpack.BannerPlugin('最終版權(quán)歸Coderg所有'),
    new HtmlWebpackPlugin({
      //將index.html文件作為模板,在此之前別忘把index.html文件中的script引入刪除
      //將output屬性中的publicPath給注釋掉
      template: 'index.html'
    })
  ]
  • 將output屬性中的publicPath給注釋掉


    image.png

將bundle.js代碼壓縮(丑化)

  • 下載插件npm install uglifyjs-webpack-plugin@1.1.1 --save-dev

  • 配置webpack.config.js


    image.png
  • 結(jié)果(所有注釋都會(huì)消除)


    image.png

webpack watch的配置問(wèn)題

  • 在修改文件內(nèi)容之后肥缔,live server之后莲兢,可以實(shí)時(shí)更新修改之后的內(nèi)容
  • 方法一:在package的scripts添加


    image.png
  • 方法二:在webpack配置文件中添加屬性


    image.png

服務(wù)器的搭建

webpack提供了一個(gè)可選的本地開(kāi)發(fā)服務(wù)器,基于Node.js的express框架续膳,可以讓瀏覽器自動(dòng)刷新怒见,顯示我們修改之后的結(jié)果

  • 需要一個(gè)獨(dú)立板塊
  • 下載對(duì)應(yīng)板塊 npm install --save-dev webpack-dev-server@2.9.1
  • 配置 package.json文件中的script


    image.png
  • 在3.11.2版本的配置方法


    image.png
  • 在終端輸入npm install dev,之后復(fù)制地址即可訪問(wèn)
    image.png
  • 配置webpack.config.js文件


    image.png
  devServer: {
    //規(guī)定服務(wù)器服務(wù)哪一個(gè)文件夾,默認(rèn)是根文件夾,我們這里要填寫(xiě)./dist
    contentBase: './dist',
    //是否要實(shí)時(shí)輸出
    inline: true,
   // port: 6666
      /* inline:頁(yè)面實(shí)時(shí)刷新
      historyApiFallback:在SPA頁(yè)面中姑宽,依賴HTML5的history模式
       */
  }
  • 加上--open之后再npm install dev就會(huì)自動(dòng)打開(kāi)網(wǎng)頁(yè)
    "dev": "webpack-dev-server --open"

熱替換

  • 熱替換:因?yàn)槊恳淮卧谛薷纳倭看a之后瀏覽器都會(huì)刷新整個(gè)頁(yè)面遣耍,所以通過(guò)熱替換之后只會(huì)刷新修改之后的內(nèi)容


    image.png

跨域訪問(wèn)之a(chǎn)xios

  • 原理:在中間加了另外一個(gè)服務(wù)器,起到代理的作用


    image.png

區(qū)分開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境

  • 生產(chǎn)環(huán)境(production)
  • 開(kāi)發(fā)環(huán)境(development)
    步驟:1. 新建文件夾


    image.png
  1. 將開(kāi)發(fā)環(huán)境依賴和生產(chǎn)環(huán)境依賴抽離出來(lái)放在對(duì)應(yīng)文件下
  2. 下載第三包 webpack-merge@4.1.5 --save-dev炮车,分別在開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境配置文件引入并配置
const webpackMerge = require('webpack-merge')
const baseConfig = require('./base.config')
module.exports = webpackMerge(baseConfig, {環(huán)境配置})

4.修改公共配置打包文件位置


image.png
  1. 配置package.json文件的腳本


    image.png
  2. npm run bulid----npm run dev
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舵变,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘦穆,更是在濱河造成了極大的恐慌纪隙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扛或,死亡現(xiàn)場(chǎng)離奇詭異绵咱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)熙兔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)悲伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)艾恼,“玉大人,你說(shuō)我怎么就攤上這事麸锉∧粕埽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵花沉,是天一觀的道長(zhǎng)柳爽。 經(jīng)常有香客問(wèn)我,道長(zhǎng)碱屁,這世上最難降的妖魔是什么磷脯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮娩脾,結(jié)果婚禮上争拐,老公的妹妹穿的比我還像新娘。我一直安慰自己晦雨,他們只是感情好架曹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著闹瞧,像睡著了一般绑雄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奥邮,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天万牺,我揣著相機(jī)與錄音,去河邊找鬼洽腺。 笑死脚粟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蘸朋。 我是一名探鬼主播核无,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼藕坯!你這毒婦竟也來(lái)了团南?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤炼彪,失蹤者是張志新(化名)和其女友劉穎吐根,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體辐马,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拷橘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冗疮。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萄唇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赌厅,到底是詐尸還是另有隱情,我是刑警寧澤轿塔,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布特愿,位于F島的核電站,受9級(jí)特大地震影響勾缭,放射性物質(zhì)發(fā)生泄漏揍障。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一俩由、第九天 我趴在偏房一處隱蔽的房頂上張望毒嫡。 院中可真熱鬧,春花似錦幻梯、人聲如沸兜畸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咬摇。三九已至,卻和暖如春煞躬,著一層夾襖步出監(jiān)牢的瞬間肛鹏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工恩沛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留在扰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓雷客,卻偏偏與公主長(zhǎng)得像芒珠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搅裙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容