Parcel打包React

Parcel介绍

Parcel,官网:parceljs.org。官网上的介绍:极速零配置Web应用打包工具。

什么?对的,你没看错,它标称的零配置打包

这个打包工具其实在一些大厂,开发 Electron 和 React/Preact 项目还挺有使用频率。

可能,你心想,大名鼎鼎的 Webpack 不拿出来吗?

我们来看看 Parcel 官网的一个打包性能基准测试对比表:

基于一个合理大小的应用,包含1726个模块,6.5M 未压缩大小。在一台有4个物理核心 CPU 的 2016 MacBook Pro 上构建。

打包工具 时间
browserify 22.98s
webpack 20.71s
parcel 9.98s
parcel - with cache 2.64s

是不是很惊讶,6.5MB 的前端应用,能做到初始化打包 10秒 以下,后续打包带着缓存执行能够做到 3秒 以下。那这样的速度,在前端开发上,岂不是要起飞!

话不多说,不试试你甘心吗,你敢信吗?

刚好前几天React更新了17.0.1最新版,我们来挑战下,是否能成功运行!

项目初始化

1. 创建项目文件夹

# Windows 下命令提示符
md parcel-demo
# macOS / Linux 等类 UNIX 操作系统终端
mkdir parcel-demo

首先,我们先创建一个空目录,作为我们的项目根路径。

2. 初始化npm项目

cd parcel-demo
npm init -y

3. 准备项目基本文件

HTML 入口默认文件

路径:src/index.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Parcel 测试</title>
</head>
<body><div id="root"></div><script src="./index.jsx"></script>
</body>
</html>

JSX入口组件渲染文件

路径:src/index.jsx

import React, { Component } from 'react'
import ReactDOM from 'react-dom'class App extends Component {render(){const { count } = this.statereturn (<div><h1>Hello World!</h1></div>)}
}ReactDOM.render(<App />, document.querySelector('#root'))

目录结构如下

/
├─src
│   ├─ index.html
│   └─ index.jsx
└─package.json

然后,就可以正式进入 Parcel 的使用环节了!

安装 Parcel打包工具(parcel)

1. 安装

当前版本:1.12.4

npm i -g parcel

2. 启动项目

parcel src/index.html

没错,我们除了安装 Parcel 打包工具,没有安装任何别的包。

项目启动后,会观察到,它居然在自动安装reactreact-dom这2个包!

而且整个过程就几秒!

3. 浏览项目

当项目进入运行状态,他会提示:

Server running at http://localhost:1234
√  Built in 319ms.

我们用Ctrl+鼠标左键,点击域名:http://localhost:1234,就能进入浏览器,查看项目。

成功!大大的h1 标签Hello World!,程序员的第一次快乐!

而且我们修改代码文件内容,它会热更新和渲染页面,nice的很嘛!

4. 查看项目包依赖

package.json

"dependencies": {"react": "^17.0.1","react-dom": "^17.0.1"
},

说明他真的自动安装依赖包,我们只需要安安心心写代码就行了!

这也太智能了吧!

进阶配置

等等,不是说好等零配置吗???

对呀,Parcel本身是零配置,但是不代表它运行的语法转换器(babel)不需要配置,哈哈,开了个大玩笑。

好吧,我们看看如果我们稍微偏业务功能会出现什么问题。

1. 支持异步函数

改写组件,增加异步代码

我们来给页面组件写个异步进行自增加 1 的函数,而且内部用异步代码实现:

改写:src/index.jsx,将 App 组件改造成如下。

class App extends Component {state = {// 数量统计状态。count: 0}// 自增加 1 事件处理函数。async incrementHandler(){const {count} = this.state;await new Promise((ok, err) => ok());// resolve 延迟执行状态修改。setTimeout(() => this.setState({count: count + 1}), 500);}render(){const { count } = this.state;return (<div>{/* 数量展示 */}<div>{count}</div>{/* 修改数量的按钮,并绑定事件处理函数 */}<button onClick={this.incrementHandler.bind(this)}>+1</button></div>)}
}

运行

当这次保存后,查看页面。

一年懵逼对吧,怎么就白板了~~~

我们打开开发者工具(F12),发现控制台(Console)打出一句大大的红色错误:

index.jsx:5 Uncaught ReferenceError: regeneratorRuntime is not definedat index.jsx:5at index.jsx:14at Object.parcelRequire.index.jsx.react (index.jsx:29)at newRequire (src.78399e21.js:47)at src.78399e21.js:81at src.78399e21.js:120

regeneratorRuntime是个什么东西?再生成器,看来就是异步函数这类异步代码出问题了。

据查阅是有个babel的插件叫transform-runtime没有在开发阶段提供高级语法等支持。

那我们开始给我们等项目添砖加瓦吧!(说好的零配置,呜呜呜~)

进入 bebel 官网找配置项目节点。

进入 bebel 官网https://babeljs.io去看看,

  • Usage

    • transform-runtime

点开transform-runtime页面,它标注我们需要添加一个特殊的插件配置项在Babel的运行起始。

创建.babelrc文件

根路径:.babelrc

拷贝官网给的配置内容粘贴到

{"plugins": ["@babel/plugin-transform-runtime"]
}

重新运行项目

注意:有些童鞋的电脑可能需要删除根目录下的缓存文件夹**.cache**,甚至需要重新运行2次项目。(不知道是什么bug)

重新运行项目,刷新浏览器,nice!布局出来了。

那么,我们点击【+1】按钮。

非常好!异步延迟500毫秒数据加一成功!

2. 配置 npm 快速编译

如果我们每次都parcel src/index.html那似乎也太麻烦了,而且,如果我们希望这么好用的Parcel能做成我们自己的脚手架,可能还不是-g全局安装,所以我们应该配置一个启动脚本。新版的 VS Code 还能识别到脚本,且点一下就能执行,它不香吗?嗯,真香!

追加一条脚本启动命令

"scripts": {"start": "parcel src/index.html"
},

完整写法

build 的参数就是打包压缩的效果,适合用于项目部署哦

"scripts": {"start": "parcel --public-url . src/index.html","build": "parcel build --public-url . src/index.html"
},

快速运行当前项目

npm start

OK!一切搞定!

总结

当然Parcel的配置本身没有什么要做的,主要等复杂点在于Babel等一系列工具链等配置和使用,整个需要我们平时积累和不断学习,掌握了不同框架、不同库它本身等运行特点才能用好这些方便等工具,不然反而给自己增添了折腾的麻烦,甚至是开发风险。

当然,如果你的项目没有给你足够的时间去折腾,那么还是老老实实用 React 官方脚手架 create-react-app去做也许更好,而且最近跟着React 17的发布,也有很大改善。大家跟着自己口味选择吧。

想查看更多的文章请关注公众号:IT巡游屋

Parcel打包React相关推荐

  1. Webpack 和 Parcel 打包辅助工具

    这篇文章分享一个 Webpack 和 Parcel 打包辅助工具. 帮助大家更好的打包自己的网站. 1.Webpack 和 Parcel 是常用的前端打包软件. 两者得区别在于: Webpack 在使 ...

  2. parcel react_如何使用Parcel捆绑React.js应用程序

    parcel react by Michael Ozoemena 迈克尔·奥索埃梅纳(Michael Ozoemena) 如何使用Parcel捆绑React.js应用程序 (How to use Pa ...

  3. [react] 使用webpack打包React项目,怎么减小生成的js大小?

    [react] 使用webpack打包React项目,怎么减小生成的js大小? 打包优化的问题解决思路: 代码压缩:UglifyjsWebpackPlugin 代码分组 commonsChunkPlu ...

  4. Electron打包React构建桌面应用

    一.Electron简介   Electron是一个能让你使用JavaScript,HTML和CSS来创建桌面应用程序的框架.这些应用程序可以打包后在 macOS.Windows 和 Linux 上直 ...

  5. parcel react_如何使用Parcel设置React应用

    parcel react For a long time Webpack was one of the biggest barriers-to-entry for someone wanting to ...

  6. 《Parcel打包工具的使用》

    目录 Parcel 学习笔记 Parcel 初始化 Parcel 安装 Parcel 入口文件 构建效果图: Parcel 学习笔记 个人博客地址: Parcel是一款零配置的打包工具; 打包速度快; ...

  7. webpack SSR打包(React)

    1.修改打包的入口文件将import语法改成require导出格式为:module.exports = <组件名 />;2.配置webpack.config.js如果配置了optimiza ...

  8. webpack打包react项目步骤

    1.在项目更目录下新建dist文件夹. 2.安装webpack: cnpm i webpack webpack-cli -D 3.安装webpack-dev-server插件 cnpm -i webp ...

  9. 打包 React 项目并在服务器运行。

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 1.找到项目根目录的package.json文件:如图: 2.打开cmd执行:npm run build 3. ...

  10. Parcel React 开发服务器热更新实战

    parcel Parcel 是 Web 应用打包工具,适用于经验不同的开发者.它利用多核处理提供了极快的速度,并且不需要任何配置. 内容 官网教程没有实现devSever和动态更新相结合具体部署步骤. ...

最新文章

  1. Python使用matplotlib可视化绘制并导出可视化结果图表到PDF文件中
  2. kindeditor 批量上传 路径_FtpClient 实现文件上传
  3. 下拉菜单连动效果的一种用法
  4. 卡写入速度_看清商家买相机送SD卡的套路,一文教你掌握存储卡选购秘诀
  5. 远程桌面连接出现身份验证错误。 要求的函数不受支持,这可能是由于 CredSSP 加密 Oracle 修正。...
  6. 实验技术杂志文献20180126
  7. nginx负载均衡简单配置
  8. 如何正确理解近似点梯度下降算法
  9. 架构师速成4.6-软技能和硬技能
  10. tcp长连接和保活时间
  11. Oracle序列更新为主键最大值
  12. android mysql 数据库文件_android mysql数据库文件
  13. runtime无法执行grep_如何使管道使用Runtime.exec()?
  14. 《信息学奥赛一本通 提高篇》
  15. java 100个定时任务_Java定时任务解决方案
  16. qzone.class.php,PHP QQ登录接口应用_PHP教程 - str_repeat
  17. springsecurity 登录失败_145-Spring Security
  18. h2事务与mysql_H2数据库事务提交失败
  19. Java - Java Mail邮件开发(2)springboot +Java Mail + Html
  20. js--京东快递单号查询案例

热门文章

  1. [COGS755]山海经
  2. 中国大陆手机号码如何注册谷歌账号?完美解决收不到验证码的问题
  3. 游戏中的角色是如何“动”起来的?
  4. 216 Web 安全色 开发中常用安全色
  5. 生物信息之独孤九剑——awk
  6. java web 图片 加载_Java web开发中加载图片路径的两种方式
  7. t460p加固态硬盘 thinkpad_联想T460p加装固态硬盘
  8. rime 简体中文 linux,Rime (简体中文)
  9. do.....while(0)让你虎躯一震的用法
  10. 一个项目从立项到终结