react 圖片放在src里面還是public_手寫Webpack從0編譯Vue/React項目

????當前前端開發,90%的項目都是Vue和React,然而70%的同學都基于腳手架創建項目,因為腳手架會包含項目基本框架、webpack配置、scss/sass/less解析、babel配置、DevServer、JSX/Vue文件解析、CSS前綴等,我們要做的就是開發功能模塊,也就是開箱即用。

????如果不用腳手架,我們怎么編寫配置?此文章要求對Vue/React有一點基礎.

技術文檔:

Webpack:?https://www.webpackjs.com/

Vue:?https://cn.vuejs.org/

React:?https://react.docschina.org/

開發環境

IDE推薦VSCode、瀏覽器推薦Chrome/Edge、Node版本:v12.13.0

創建項目

# 進入工作空間cd workspace#?創建項目mkdir?webpack-demo?(window用戶直接右鍵創建)# 進入到項目中cd webpack-demo#?初始化配置(默認一路回車)npm?init

打開項目

88953b8e073304359d5a49402cd77e59.png

創建目錄

node_modules:項目依賴目錄,提前創建是為了添加gitignore

public:Vue項目靜態目錄,仿Vue4.0腳手架

src:項目源碼

.gitignore:忽略Git提交文件

41b9eee8ea0f3e10fb801a109408f8a6.png

初始化為Git項目(方便管理)

#?終端下執行git init

編寫代碼(基礎部分直接上代碼)

index.html

# public下index.html            Vue    

main.js

#?main.js入口import Vue from 'vue'import App from './app.vue'new Vue({    el:'#app',    render:(h)=>h(App)})

app.vue

    

歡迎學習webpack4.42知識

{{title}}

export default { name:'app', data(){ return { title:'Hello Vue' } } } .app{ text-align: center; }

創建Webpack配置

webpack默認配置:webpack.config.js,不建議修改名字

前端常用規范:AMD、CMD、CommonJS、ES,webpack遵循的是CommonJS規范,需要使用module.export導出。

打包基本配置

# webpack4.42版本,內容講解module.exports = {??? mode:'development',//指定環境,生成:production????entry:'./src/main.js',//項目入口????//項目輸出????output:{????????// [name]指原名字?????????// [hash]會生成hash串添加在name后面????    filename:'[name].[hash].js',????    // 打包輸出目錄????????//__dirname是node語法,指當前目錄意思????    path:__dirname+'/dist',????????//?根路徑默認/,用在打包后的js/css上面????    publicPath:'/',????    // 打包模塊名稱????    library:'webpack-demo',????????//?打包模塊方式,umd實際上是AMD+CMD混合????    libraryTarget:'umd'????}}

通過library設置后如下:

0ec1538818a079939e211da5fb6bcbf1.png

注:以上代碼只是打包的基礎配置,只能打包原生JS,還不能編譯Vue項目。

安裝依賴

???? 分析Vue文件,我們會發現,包含ES6、.vue、scss語法所以我們需要安裝對應插件。

開發Vue項目,必然需要安裝Vue

cnpm?i?vue?-S#?OR cnpm install vue --save

--save 和 --save-dev區別:save會保存在dependencies里面,save-dev會保存在devDependencies里面,項目生產依賴用save,項目開發依賴用dev.

安裝loader

# vue-loader 解析.vue文件vue-loader vue-template-compiler# 解析scss/sass語法node-sass?sass-loader#?添加樣式前綴?postcss-loader autoprefixer# 把scss/less轉換為csscss-loader#?把css轉化為style樣式style-loader#?解析ES6語法(必須安裝三個)@babel/core @babel/preset-env babel-loader#?解析圖片(file-loader增強版)url-loader?file-loader# 安裝到dev依賴中cnpm i vue-loader vue-template-compiler node-sass sass-loader postcss-loader autoprefixer css-loader style-loader @babel/core @babel/preset-env babel-loader url-loader file-loader -D

以上是針對本次Vue項目所需要安裝的插件和loader

/** * webpack4.42版本,內容講解 * module可以設置模塊解析規則和loader * test 校驗規則 * use 加載loader,從右往左 * exclude 排除目錄 * include 包含目錄 */module.exports = {??//?mode、entry、output參考上面  module:{        rules:[            {                test:/\.css$/,                use:['style-loader','css-loader','postcss-loader'],                exclude:/node_modules/,                include:/src/            },{                test:/\.vue$/,                loader:'vue-loader',                exclude:/node_modules/,                include:/src/            },{                test:/\.(js|.jsx)$/,                loader:'babel-loader',                exclude:/node_modules/,                include:/src/            },{                test:/\.(png|jpg|gif|svg)$/,                use:{                    loader:'url-loader',                    options:{????????????????????????//?10k以下用base64????????????????????????limit:10                    }                },                exclude:/node_modules/            },{                test:/\.(scss|sass)$/,                use:['style-loader','css-loader','postcss-loader','sass-loader'],                exclude:/node_modules/,                include:/src/            }        ]????}}

安裝webpack

# 打包必須webpack webpack-cli # 啟動本地服務器webpack-dev-server# 安裝到開發依賴中cnpm?i?webpack?webpack-cli?webpack-dev-server -D

安裝webpack-plugin

#?清空文件夾clean-webpack-plugin# html抽取打包html-webpack-plugin# 復制插件copy-webpack-plugin# 安裝到開發依賴中cnpm?i?clean-webpack-plugin?html-webpack-plugin?copy-webpack-plugin?-D

webpack-plugin配置

const { CleanWebpackPlugin } = require('clean-webpack-plugin');const HtmlWebpackPlugin = require('html-webpack-plugin');const VueLoaderPlugin = require('vue-loader/lib/plugin');const CopyWebpackPlugin = require('copy-webpack-plugin');module.exports = {    // mode/entry/output/module參考上面    plugins:[        // 打包前清空目錄        new CleanWebpackPlugin(),        // 解析Vue需要配合插件使用        new VueLoaderPlugin(),        // 復制public內容到dist里面去????????//?vuecli4.0會生成public文件夾,里面包含index.html和靜態資源????????// 此處通過復制插件,在打包時,將public全部拷貝過去        new CopyWebpackPlugin([            {                from : __dirname + '/public',                to : __dirname + '/dist',                ignore: ['.*']            }        ]),????????//?html打包插件,會自動把js插入進去        new HtmlWebpackPlugin({            template:'public/index.html'        }),????]}

DevServer配置

// 通過本地服務器訪問Vue項目module.exports = {  devServer:{        // 服務根目錄        contentBase:__dirname+"/dist",        // 服務主機        host:'localhost',        // 服務端口        port:8080,        // 代碼熱更新        hot:true,        // 默認打開瀏覽器        open:true,        // 默認打開的頁面        openPage:'index.html',        // 接口代理,作用相當大        proxy:{            "/api":{????????????????target:"http://lemall.futurefe.com"            }        }    }}

到此我們完成了大部分代碼規則的配置,接下來,我們需要再添加兩個小配置:.babelrc和postcss

創建.babelrc文件

{    "presets":[        "@babel/preset-env",        "@babel/preset-react"    ]}

注:Vue項目使用第一個,React項目使用第二個

@babel/preset-env?是 Vue babel插件

@babel/preset-react?是 React babel插件

添加postcss配置

通常有些項目會使用postcss.config.js,我們這兒推薦修改package.json,添加對應配置。

打開package.json,添加如下代碼:

"postcss": {  "plugins": {    "autoprefixer": {}  }},"browserslist": [  "> 1%",  "last 2 versions"]

到此我們的項目全部配置完成,接下來,就添加運行腳本:

在scripts里面增加build和serve

"scripts": {    // 生產打包    "build": "webpack",    // 本地啟動服務????"serve":?"webpack-dev-server"  },

OK,接下來,運行cnpm run build即可打包代碼:

ce7222b6d6a82bb0a36af28a98de52ae.png

開啟本地服務:

4b848ee004d8df701200c7a4302acf93.png

最后,我們嘗試添加圖片代碼,看看是否能解析:

  1. 拷貝圖片到public下面

  2. 在app.vue中添加img標簽

<div class="app">    <h1>歡迎學習webpack4.42知識h1>    <p>{{title}}p>    <p>歡迎關注:前端未來,關乎你的未來p>    <img src="/imgs/qrcode.jpg" alt="">div>

項目會自動熱更新,截圖如下:

cec260c1af16800c27f28bfbe9ead3d1.png

代碼已上傳Github,有需要的同學,可自行下載:

https://github.com/JackySoft/webpack-demo

同樣,大家可以模仿此文章打包React項目,React項目本身是jsx語法,通過babel-loader解析即可,代碼基本不動,大家只需要添加React代碼即可編譯運行。

關注前端,關注未來,關乎你的未來

49303959c94e6099a444aafb443af15b.png

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

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

相關文章

python union函數_如何掌握Python union()方法及怎么用?

不斷學習python的過程里&#xff0c;總能遇到各種形形色色的函數或者方法&#xff0c;本章給大家帶來python union的用法&#xff0c;具體內容如下&#xff1a;union()方法描述&#xff1a;union() 取并集&#xff0c;效果等同于 | &#xff0c;重復元素只會出現一次&#xff0…

輸入分鐘輸出小時python_輸出鍵,值對如何使1小時內的時間在使用Python的MapReduce中的reducer中結束?...

這是一個策略&#xff1a;來自Mapper的&#xff1a;發出每個記錄的三個副本并使用二級排序&#xff1a;((復合鍵)&#xff0c;值)((消息小時 - 一小時&#xff0c;當前消息的精確時間)&#xff0c;消息)((消息小時&#xff0c;消息的準確時間)&#xff0c;消息)((消息小時1小時…

python 在線預覽文件_用Python PyQt寫一個在線預覽圖片的GUI

在爬完網上一篇帖子&#xff0c;并得到其中的所有圖片鏈接后&#xff0c;寫一個GUI來實現在線預覽是一個很自然的想法&#xff0c; 相當于實現一個python版的圖片瀏覽器&#xff0c; 通過這個練習&#xff0c;可以讓我們更熟悉PyQt這個庫。這里我用的是PyQt4。以下是我的寫的程…

python怎樣安裝模塊_python中如何安裝模塊

下面介紹幾種安裝Python模塊的幾種方式方法1&#xff1a;easy_install 方式先下載ez_setup.py,運行python ez_setup 進行easy_install工具的安裝&#xff0c;之后就可以使用easy_install進行安裝package了。本文安裝的是Python 2.7.13版本&#xff0c;已經自帶了easy_install。…

java rt_java中rt包中源碼了解

javap –verbose class名 查看class文件的具體內容javap -c class名繼續看io類接口 java.io.Closeable功能&#xff1a;關閉流和相應的資源java.io.console功能&#xff1a;使用字節控制臺&#xff0c;與當前的java virtual machine 相關java.io.DataInput功能&#xff1a;從二…

google 確定某點海拔高_一份“高投資回報率”的用戶體驗度量方法指南

本文核心就是介紹體驗度量方法&#xff0c;以及如何在商業項目中如何發起一個具有高ROI(投資回報率)的用戶體驗量化流程。 下面文章將分為解讀高投資回報和拆解體驗度量、實際案例講解三部分。一、解讀高投資回報率高ROI(投資回報率)來定義體驗度量流程的原因&#xff1f;3-5年…

md5 java代碼_JAVA簡單實現MD5注冊登錄加密實例代碼

開發環境&#xff1a;jdk1.7&#xff0c;eclipse框架&#xff1a;springmvc&#xff0c;mybatis工具&#xff1a;maven以下代碼復制即可實現MD5加密創建一個mave項目&#xff0c;加web。不懂得可以搜索一下就有了。注冊用戶的JSP頁面代碼如下。pageEncoding"utf-8"%&…

一維卷積神經網絡_序列特征的處理方法之二:基于卷積神經網絡方法

前言上一篇文章介紹了基本的基于注意力機制方法對序列特征的處理&#xff0c;這篇主要介紹一下基本的基于卷積神經網絡方法對序列特征的處理&#xff0c;也就是TextCNN方法。序列特征的介紹&#xff0c;背景以及應用可以參考上一篇的詳細介紹&#xff0c;這里簡單回顧一下定義&…

java socket 阻塞模式_(四) 如何將socket設置為非阻塞模式

1. windows平臺上無論利用socket()函數還是WSASocket()函數創建的socket都是阻塞模式的&#xff1a;SOCKET WSAAPI socket( _In_ int af, _In_ int type, _In_ int protocol ); SOCKET WSASocket( _In_ int af, _In_ int t…

python中的pygame模塊使用方法_Pygame的基本使用

Pygame有很多模塊&#xff0c;每個模塊又有很多方法&#xff0c;在此不能夠逐一講解&#xff0c;所以&#xff0c;我們通過一個實例來學習Pygame&#xff0c;然后再分解代碼&#xff0c;講解代碼中的模塊。例&#xff1a;制作一個跳躍的小球游戲。創建一個游戲窗口&#xff0c;…

java mongodb 插入數據_mongoDB 插入數據 用java實現

import java.net.UnknownHostException;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBObject;import com.mongodb.Mongo;/** *用java 往mongoDB插入數據 * author wwd* */public class InsertData {publi…

python的特征提取實驗一_Spark 2.1.0 入門:特征抽取 — TF-IDF(Python版)

這一部分我們主要介紹和特征處理相關的算法&#xff0c;大體分為以下三類&#xff1a;特征抽取&#xff1a;從原始數據中抽取特征特征轉換&#xff1a;特征的維度、特征的轉化、特征的修改特征選取&#xff1a;從大規模特征集中選取一個子集特征提取TF-IDF (HashingTF and IDF)…

java addlast_Java中的LinkedList addLast()方法: java.util.LinkedList.addLast() - Break易站

Java中的java.util.LinkedList.addLast()方法用于在LinkedList的末尾插入特定元素。句法&#xff1a;void addLast(Object element)參數&#xff1a;此函數接受單個參數元素&#xff0c;如上面的語法所示。此參數指定的元素將附加在列表的末尾。返回值&#xff1a;此方法不返回…

macos降級_iOS12.3 beta2更新了什么 iOS12.3測試版2新特性與升降級方法

4月0日凌晨&#xff0c;蘋果發布了iOS12.3 beta2&#xff0c;作為iOS12.3第二個測試版&#xff0c;相比前一個版本&#xff0c;發布時間間隔近2周&#xff0c;這次依然是小版本更新&#xff0c;不過相對良心一些&#xff0c;主要是多了一些與國內用戶相關的東西。iOS12.3 beta …

java技術教程視頻_Spring開發視頻教程高級篇+源碼(400M)33講

Spring開發視頻教程高級篇源碼(400M)33講01_全面闡釋Spring及其各項功能.rar 02_搭建與測試Spring的開發環境.rar 03_編碼剖析Spring管理Bean的原理.rar 04_Spring的三種實例化Bean的方式.rar 05_配置Spring管理的bean的作用域.rar 06_Spring管理的Bean的生命周期.rar 07_編碼剖…

python的常見矩陣除法_Numpy矩陣除法返回所有零

我對下面的矩陣有個除法錯誤。我想用行和的101向量除以1010matrix。在[[5731, 3, 20, 8, 12, 54, 46, 8, 39, 2],[ 2, 6472, 47, 24, 7, 44, 7, 11, 116, 12],[ 55, 36, 5296, 104, 84, 27, 106, 53, 183, 14],[ 50, 49, 132, 5312, 2, 253, 36, 58, 142, 97],[ 16, 28, 36, 9,…

java rc2加密_急求java RC2加密算法

下面是一段C RC2加密 要求要用java 重寫 能互相加密解密QSBEncryptRc2::QSBEncryptRc2(){EncryKey "DingXin Communication Key 20080613";}//解密失敗時返回失敗描述AnsiString QSBEncryptRc2::GetDecryptErrMsg(){int ErrorCode;AnsiString ErrMsg;ErrorCode …

linux配置usb主從_雜集:淺談關于Mongodb數據庫主從復制

Linux下Mongodb數據庫主從復制配置Mongodb的三種集群搭建的方式&#xff1a;Master-Slaver&#xff1a;主從[目前被副本集取代]。Replica Set&#xff1a;副本集。Sharding&#xff1a;切片。Mongodb單實例缺點&#xff1a;適合簡易開發時使用&#xff0c;生產使用不行&#xf…

java讀取郵箱附件_使用javamail獲取附件內容

我正在使用javamail來自動化一些電子郵件處理。使用javamail獲取附件內容我設法連接到pop3服務器并獲取消息。其中一些包含附件。根據郵件標題&#xff0c;我可以“預測”我需要獲取的附件的文件名。但我無法得到它的內容:(我有一個函數public byte[] searchForContent(Part pa…

高斯擬合 vc++代碼_NMA2020W1 極大似然法模型擬合與bootstrap

常見的線性模型&#xff1a; 求解方式有兩種&#xff0c;一種是計算均方誤差&#xff08;MSE&#xff09;&#xff0c;使得均方誤差最小。圖1找到梯度為零的點即可。而之前一直比較模糊的最大似然法也比較清楚了。一般線性模型&#xff0c;我們假定誤差項是符合高斯分布的&…