当前前端开发,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

打开项目

创建目录

node_modules:项目依赖目录,提前创建是为了添加gitignore

public:Vue项目静态目录,仿Vue4.0脚手架

src:项目源码

.gitignore:忽略Git提交文件

初始化为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设置后如下:

注:以上代码只是打包的基础配置,只能打包原生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即可打包代码:

开启本地服务:

最后,我们尝试添加图片代码,看看是否能解析:

  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>

项目会自动热更新,截图如下:

代码已上传Github,有需要的同学,可自行下载:

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

同样,大家可以模仿此文章打包React项目,React项目本身是jsx语法,通过babel-loader解析即可,代码基本不动,大家只需要添加React代码即可编译运行。

关注前端,关注未来,关乎你的未来

react打包后图片丢失_手写Webpack从0编译Vue/React项目相关推荐

  1. react打包后图片丢失_手搭一个 React,Typescript,Koa,GraphQL 环境

    本文系原创,转载请附带作者信息:yhlben 项目地址:https://github.com/yhlben/cdfang-spider 前言 在实际的开发过程中,从零开始初始化一个项目往往很麻烦,所以 ...

  2. react 图片放在src里面还是public_手写Webpack从0编译Vue/React项目

    当前前端开发,90%的项目都是Vue和React,然而70%的同学都基于脚手架创建项目,因为脚手架会包含项目基本框架.webpack配置.scss/sass/less解析.babel配置.DevSer ...

  3. react打包后图片丢失_宜信技术实践|指尖前端重构(React)技术调研分析

    一.为什么选择React React是当前前端应用最广泛的框架.三大SPA框架 Angular.React.Vue比较. Angular出现最早,但其在原理上并没有React创新的性能优化,且自身相对 ...

  4. react打包后图片丢失_使用 webpack 搭建 React 项目

    简评:相信很多开发者在入门 react 的时候都是使用 create-react-app 或 react-slingshot 这些脚手架来快速创建应用,当有特殊需求,需要修改 eject 出来的 we ...

  5. react打包后图片丢失_如何快速构建React组件库

    俗话说:"麻雀虽小,五脏俱全",搭建一个组件库,知之非难,行之不易,涉及到的技术方方面面,犹如海面风平浪静,实则暗礁险滩,处处惊险〜 目前团队内已经有较为成熟的 Vue 技术栈的 ...

  6. react打包后图片丢失_React中型项目的优化实践

    本文可能涉及的内容-- 项目介绍 整个项目大概有60+个页面,用到的组件大概150+,package里面的依赖大概有70+个,应该勉强算得上是一个中型的React的项目了. 下面给大家看看我们现在bu ...

  7. react打包后图片丢失_React系列四 - React脚手架

    一. 认识脚手架 1.1. 前端工程的复杂化 如果我们只是开发几个小的demo程序,那么永远不需要考虑一些复杂的问题: 比如目录结构如何组织划分: 比如如何管理文件之间的相互依赖: 比如如何管理第三方 ...

  8. babel原理_手写webpack核心原理,再也不怕面试官问我webpack原理

    手写webpack核心原理 一.核心打包原理 1.1 打包的主要流程如下 1.2 具体细节 二.基本准备工作 三.获取模块内容 四.分析模块 五.收集依赖 六.ES6转成ES5(AST) 七.递归获取 ...

  9. react 打包体积过大_彻底解决 webpack 打包文件体积过大

    webpack 把我们所有的文件都打包成一个JS文件,这样即使你是一个小项目,打包后的文件也会非常大.下面就来讲下如何从多个方面进行优化. 去除不必要的插件 刚开始用 webpack 的时候,开发环境 ...

最新文章

  1. 《编程匠艺》读书笔记之十四
  2. python学会了能做什么-学会Python后都能做什么?介绍五种Python的实用场景
  3. debug —— set args调试命令(作为程序运行时的参数)
  4. 成功解决coordinate_descent.py:491: ConvergenceWarning: Objective did not converge. You might want to inc
  5. 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享)
  6. JavaScript 访问对象属性和方法及区别
  7. Java NIO使用及原理分析
  8. Eclipse3.6.2 64位启动报“Failed to load the JNI shared library”错的解决方法
  9. jedispool redis哨兵_通过java哨兵JedisSentinelPool代码示例连接对配置的redis哨兵主从模式进行测试验证...
  10. Ubuntu普通用户使用串口设备
  11. arch linux u盘安装,安装 ArchLinux 到U盘(四)安装Archlinux
  12. Pass4side EMC E20-817认证考试题库
  13. 流式套接字:基于TCP协议的Socket网络编程(案例1)
  14. “我是技术总监,你为毛总问我技术细节?”
  15. 非常有用的微信公众号平台开发各种错误返回码一览表
  16. Mplayer 音量控制
  17. MongoDB数据导入 JSON
  18. 汇编语言学习:如何理解“物理地址=段地址X16+偏移地址”
  19. Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common
  20. webrtc 研究-带宽控制

热门文章

  1. JS/PHP中,数组与字符串的转换,这次总算是记住了
  2. day13 java的多态
  3. python zipfile_python zipfile模块
  4. json转excel_手写JAVA实现个性化业务的Excel转JSON,效率提高99.99%
  5. 无线打印机 连接路由器连接到服务器,怎么通过无线路由器连到有的打印机线网络...
  6. 22_python基础—异常
  7. 苹果6s最大屏幕尺寸_iPhone12来了,我决定给老苹果升级一下电池_电池
  8. linux 文本 编辑 软件下载,文本编辑软件 Atom 1.5.0 已经发布下载
  9. python 投票计数器全班50人3个候选人_Python程序为STV投票系统,为每个人加上所有的第一偏好票...
  10. excel文件无法打印提示内存不足_U盘拷贝文件提示目标文件过大无法复制怎么解决...