webpack入門——構建簡易版vue-cli

用vue-cli1/2搭建一個vue項目時,可以看到有很多關于webpack配置的文件。我們不需要知道那些繁瑣的配置文件有什么作用,只需在控制臺輸入npm run dev,項目自動啟動,我們就可以愉快的寫業務代碼了。

雖然vue-cli幫我們做好了一切,我們就能不用學webpack了嗎?NoNoNo...現代前端工程師必備的技能就是模塊化構建打包項目,不信去那些招聘網站的前端JD看看。廢話不多說,下面讓我們用webpack構建一個簡單的vue-cli。

?

第一步:安裝NodeJS(webpack基于NodeJS)

下載地址:http://nodejs.cn/download/,傻瓜式安裝,一直下一步就ok。安裝完畢,在控制臺輸入node -v檢查是否按照成功。

NodeJS是JavaScript的運行環境,像瀏覽器一樣。安裝之后可以通過node命令運行JavaScript代碼,比如:node a.js

npm(node package manage of JavaScript)作用:Node.js下載后自帶npm,類似于迅雷下載資源,可以下載項目所需的依賴模塊/包。

  1. 允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
  2. 允許用戶從NPM服務器下載并安裝別人編寫的命令行程序到本地使用。
  3. 允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。

    npm是國外的,可能會比較慢,建議安裝cnpm,安裝方法:npm install -g cnpm --registry=https://registry.npm.taobao.org

第二步:npm init初始化生成package.json

  1. 首先建立一個空的項目文件夾,
  2. 進入文件夾,shift+右擊,出現【在此處打開命令窗口(W)】,
  3. 點擊進入cmd控制臺,命令路徑即為當前文件夾目錄,
  4. 然后輸入npm init -y,回車,之后會在根目錄創建一個package.json。

    package.json用來存放整個項目的依賴模塊/包,當我們把整個項目遷移到別的地方使用時,項目運行時會根據package.json的依賴參數自動下載所需模塊/包。

第三步:安裝webpack

命令:npm install webpack@3.12.0 --save-dev

測試webpack在本地是否可用,webpack -v如果出現webpack為無效命令,則使用全局安裝webpack:npm install webpack@3.12.0 -g。安裝成功后就可以使用webpack命令玩耍了。

建議安裝wepack3,webpack4對vue-cli的兼容還不是很好

webpack可以看做是模塊打包機:它做的事情是,分析你的項目結構,找到JavaScript模塊以及其它的一些瀏覽器不能直接運行的拓展語言(Scss,TypeScript等),并將其轉換和打包為合適的格式供瀏覽器使用。

Grunt和Gulp的工作方式是:在一個配置文件中,指明對某些文件進行類似編譯,組合,壓縮等任務的具體步驟,工具之后可以自動替你完成這些任務。

第四步:webpack打包模塊

很多文件類型,比如vue、css、img、字體...需要我們配置相應的loader才能完成正確解析并打包。

比如,把css打包到js文件中,需要安裝css加載器,安裝命令:npm install --save-dev style-loader css-loader
css-loader?和?style-loader,二者處理的任務不同
css-loader使你能夠使用類似@import 和 url(...)的方法實現?require()的功能
style-loader將所有的計算后的樣式用<style></style>加入頁面中,二者組合在一起使你能夠把樣式表嵌入webpack打包后的JS文件中?

命令行打包(不推薦):

webpack {entry file} {destination for bundled file} // 如webpack ./js/main.js ./dist/bundle.js 自動創建dist目錄

這種打包方式,在js文件中引入css文件時要注明loaderrequire('style-loader!css-loader!../css/index.css')?注意順序不能錯!?

配置文件打包(推薦):
需要在項目的根目錄創建webpack.config.js.項目里配置如下:

module.exports = {entry:  __dirname + "/src/main.js",// 入口文件,可以多個 output: { path: __dirname + "/dist", // 絕對路徑,打包后的文件存放的文件夾 filename: "build.js" // 相對路徑,打包后輸出的文件 },   // 1. 不同webpack版本配置loader的方式不同,webpack3用loaders,webpack4用rules // 2. 命令行方式引入css的require('style-loader!css-loader!../css/index.css') 就可以寫成 require('../css/index.css')  module: { loaders: [ { test: /\.css$/, loader: 'style-loader!css-loader' }, { test: /\.(jpg|png|jpeg|svg)$/, loader: 'url-loader', options: { // 大于10000字節會被打包成重命名的圖片資源,否則打包成base64 limit: 10000 // name: utils.assetsPath('img/[name].[hash:7].[ext]') } }, { test: /\.vue$/, loader: 'vue-loader' }, { test: /\.js$/, loader: 'babel-loader', exclude: /node_modules/, options: { presets: ['env'], // 處理關鍵字,es6/7/8/9...都能轉化 plugins: ['transform-runtime'] // 處理函數 } } ] } }

package.json中配置scripts:{"build": 'webpack'}webpack命令會默認運行webpack.config.js文件),執行npm run build即可打包

第五步:搭建webpack服務器

上面4步就可以完成項目的打包任務,但是開發環境還需要更進一步配置。

webpack-dev-server可以像php/java/.net...一樣搭建為我們搭建一個服務器,這樣就可以熱更新項目代碼,實現實時運行項目,進而方便我們調試項目。

    1. 安裝:?npm install webpack-dev-server -g
    2. 寫入到依賴:?npm install webpack-dev-server --save-dev
    3. 配置命令:scripts:{"dev": 'webpack-dev-server --hot --inline'}?// 實現熱更新和在線編譯
    4. 運行命令:npm run dev
    5. 輸入localhost:8080/運行... // webpack-dev-server的默認端口是8080

具體代碼見:https://github.com/tzy13755126023/webpack-vue-cli

最后,webpack版本更新很頻繁,各種npm包也更新很頻繁,這就會導致一個兼容問題,動不動就報錯,這點很讓人頭疼,很容易會導致從入門到放棄。

轉載于:https://www.cnblogs.com/tzy1997/p/10963304.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393442.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393442.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393442.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode43. 字符串相乘

給定兩個以字符串形式表示的非負整數 num1 和 num2&#xff0c;返回 num1 和 num2 的乘積&#xff0c;它們的乘積也表示為字符串形式。 示例 1: 輸入: num1 “2”, num2 “3” 輸出: “6” 代碼 class Solution {public String multiply(String num1, String num2) {if(n…

作業二:個人博客作業內容:需求分析

作業二&#xff1a;個人博客作業內容&#xff1a;需求分析 怎樣與用戶有效溝通獲取用戶的真實需求&#xff1f;訪談&#xff0c;正式訪談系統分析員將提出一些事先準備好的具體問題&#xff1b;非正式訪談中&#xff0c;分析人員將提出一些用戶可以自由回答的開放性問題&#…

HBase數據備份及恢復(導入導出)的常用方法

一、說明 隨著HBase在重要的商業系統中應用的大量增加&#xff0c;許多企業需要通過對它們的HBase集群建立健壯的備份和故障恢復機制來保證它們的企業&#xff08;數據&#xff09;資產。備份Hbase時的難點是其待備份的數據集可能非常巨大&#xff0c;因此備份方案必須有很高的…

react和react2_為什么React16是React開發人員的福氣

react和react2by Harsh Makadia通過苛刻馬卡迪亞 為什么React16是React開發人員的福氣 (Why React16 is a blessing to React developers) Just like how people are excited about updating their mobile apps and OS, developers should also be excited to update their fr…

jzoj4598. 【NOIP2016模擬7.9】準備食物

一個th的題&#xff08;a gensokyo&#xff09; 難度系數在該知識點下為$2.1$ 區間xor我們很明顯會想到trie樹&#xff0c;將每一個區間$l~r$異或和拆成$sum[l-1]$ $sum[r]$兩個數的異或 注意到二進制的性質&#xff0c;比當前低的位即使都取1加起來都沒有這位選1答案高&#x…

java number轉string_Java Number類, Character類,String類

字符串在Java編程中廣泛使用&#xff0c;字符串就是一系列字符(由一個個的字符組成)。 在Java編程語言中&#xff0c;字符串被視為對象。Java平臺提供String類來創建和操作字符串。1. 創建字符串創建字符串的最直接方法是 -String str "Hello world!";每當它在代碼中…

Android商城開發系列(二)——App啟動歡迎頁面制作

商城APP一般都會在應用啟動時有一個歡迎界面&#xff0c;下面我們來實現一個最簡單的歡迎頁開發&#xff1a;就是打開商城App&#xff0c;先出現歡迎界面&#xff0c;停留幾秒鐘&#xff0c;自動進入應用程序的主界面。 首先先定義WelcomeActivity布局&#xff0c;布局非常簡單…

DELL安裝不了mysql_Windows 版本 Mysql 8.x 安裝

1、官網下載安裝包百度網盤鏈接&#xff1a;https://pan.baidu.com/s/1cFRbQM5720xrzMxbgjPeyA提取碼&#xff1a;xlz72、解壓安裝包并新建一個文件夾作為安裝目錄(mysqlInstall)3、配置 Mysql 環境變量4、在解壓好的目錄下新建一個 my.ini 文件(注意&#xff1a;my.ini 文件和…

lambda 使用_如何使用Lambda和API網關構建API

lambda 使用Do you want to access your database, control your system, or execute some code from another website? An API can do all of this for you, and they’re surprisingly easy to set up.您是否要訪問數據庫&#xff0c;控制系統或從其他網站執行一些代碼&…

Hyper-V Server聯機調整虛擬硬盤大小

1. 技術概述&#xff1a; 從 Windows Server 2012 R2開始&#xff0c;管理員可以在運行虛擬機的同時&#xff0c;使用 Hyper-V 來擴展或壓縮虛擬硬盤的大小。存儲管理員可以通過對運行中的虛擬硬盤執行維護操作來避免代價不菲的停機。不再需要關閉虛擬機&#xff0c;這可以避免…

leetcode162. 尋找峰值(二分法)

峰值元素是指其值大于左右相鄰值的元素。 給定一個輸入數組 nums&#xff0c;其中 nums[i] ≠ nums[i1]&#xff0c;找到峰值元素并返回其索引。 數組可能包含多個峰值&#xff0c;在這種情況下&#xff0c;返回任何一個峰值所在位置即可。 你可以假設 nums[-1] nums[n] -…

python網絡爬蟲(5)BeautifulSoup的使用示范

創建并顯示原始內容 其中的lxml第三方解釋器加快解析速度 import bs4 from bs4 import BeautifulSoup html_str """ <html><head><title>The Dormouses story</title></head> <body> <p class"title"><…

Mingw編譯DLib

Mingw編譯DLib 因為機器上安裝了qt-opensource-windows-x86-mingw530-5.8.0&#xff0c;所以準備使用其自帶的mingw530來編譯DLib使用。 因為DLib使用CMake的構建腳本&#xff0c;所以還請先安裝好CMake。 cmake的下載地址如下https://cmake.org/files/v3.7/cmake-3.7.2-win64-…

探索JavaScript的關閉功能

Discover Functional JavaScript was named one of the best new Functional Programming books by BookAuthority!“發現功能JavaScript”被BookAuthority評為最佳新功能編程書籍之一 &#xff01; A closure is an inner function that has access to the outer scope, even…

QueryList 配置curl參數 的文檔位置 QueryList抓取https 終于找到了

需要設置ssl證書&#xff0c;或者不驗證證書&#xff0c;例&#xff1a;$ql QueryList::get(https://...,[],[verify > false]);設置這個 verify > false , 所以curl的其他參數就在這里配置即可 文檔在 https://guzzle-cn.readthedocs.io/zh_CN/latest/request-optio…

leetcode981. 基于時間的鍵值存儲(treemap)

創建一個基于時間的鍵值存儲類 TimeMap&#xff0c;它支持下面兩個操作&#xff1a; set(string key, string value, int timestamp) 存儲鍵 key、值 value&#xff0c;以及給定的時間戳 timestamp。 2. get(string key, int timestamp) 返回先前調用 set(key, value, times…

物聯網筆記

轉載于:https://www.cnblogs.com/16-C-kai/p/6596682.html

關于大學生玩網絡游戲的調查問卷

1.創建問卷&#xff0c;輸入調查名稱 2編輯問卷 3檢查問卷&#xff0c;是否有誤 4.提交并發布問卷 5分享問卷 6.問卷分析 轉載于:https://www.cnblogs.com/dzw1996/p/7786754.html

java自動排序_java ArrayList自動排序算法的實現

前幾天寫的那個是錯誤的&#xff0c;在這里將正確的更新。。。通過實現ComParator接口&#xff0c;并且對Compare函數進行重寫&#xff0c;自定義排序規則實現對ArrayList中對象的排序。。Student類定義&#xff1a;通過右鍵-》source-》自動生成Set和get方法package first;imp…

1到100的二進制編碼_每天經過100天的編碼后,我學到了什么

1到100的二進制編碼Eleftheria Batsou is a web developer from Thessaloniki, Greece. She gave a talk at the Codegarden conference about her experience doing a solid 100 days of coding every day as part of the #100DaysOfCode Challenge.Eleftheria Batsou是來自希…