Parcel 打包示例(React HelloWorld)


Posted in Javascript onJanuary 16, 2018

Parcel 打包特点

极速打包时间

Parcel 使用 worker 进程去启用多核编译。同时有文件系统缓存,即使在重启构建后也能快速再编译。

 将你所有的资源打包

Parcel 具备开箱即用的对 JS, CSS, HTML, 文件 及更多的支持,而且不需要插件。

自动转换

如若有需要,Babel, PostCSS, 和PostHTML甚至 node_modules 包会被用于自动转换代码.

配置代码分拆

使用动态 import() 语法, Parcel 将你的输出文件束(bundles)分拆,因此你只需要在初次加载时加载你所需要的代码。

 热模块替换

Parcel 无需配置,在开发环境的时候会自动在浏览器内随着你的代码更改而去更新模块。

友好的错误日志

当遇到错误时,Parcel 会输出 语法高亮的代码片段,帮助你定位问题。

使用 Parcel 打包的 React HelloWorld 应用。GitHub 地址: https://github.com/justjavac/parcel-example/tree/master/react-helloworld

0. 新建目录

mkdir react-helloworld
cd react-helloworld

1. 初始化 npm

yarn init -y

npm init -y

此时会创建要给 package.json 文件,文件内容:

{
 "name": "parcel-example-react-helloworld",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
}

2. 添加 React

yarn:

yarn add react react-dom

npm:

npm install react react-dom --save

package.json 文件内容:

{
  "name": "parcel-example-react-helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
- "license": "ISC"
+ "license": "ISC",
+ "dependencies": {
+  "react": "^16.2.0",
+  "react-dom": "^16.2.0"
+ }
 }

3. 添加 Babel

新建 .babelrc 文件

touch .babelrc

输入内容:

{
 "presets": ["react"]
}

添加 babel-preset-react:

yarn:

yarn add babel-preset-react -D

npm:

npm install babel-preset-react --D

此时 package.json 文件内容:

{
  "name": "parcel-example-react-helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
   "react": "^16.2.0",
   "react-dom": "^16.2.0"
-  }
+  },
+  "devDependencies": {
+   "babel-preset-react": "^6.24.1"
+  }
 }

5. 添加 Parcel

yarn:

yarn add parcel-bundler -D

npm:

npm install parcel-bundler --D

此时 package.json 文件内容:

{
  "name": "parcel-example-react-helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
   "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
   "react": "^16.2.0",
   "react-dom": "^16.2.0"
  },
  "devDependencies": {
-   "babel-preset-react": "^6.24.1"
+   "babel-preset-react": "^6.24.1",
+   "parcel-bundler": "^1.0.3"  
  }
 }

6. 新建 index.html 文件

内容

<html>
<body>
  <div id="root"></div>
  <script src="./index.js"></script>
</body>
</html>

7. 新建 index.js 文件

import React from "react";
import ReactDOM from "react-dom";
const App = () => {
 return <h1>Hello World!</h1>;
};

ReactDOM.render(<App />, document.getElementById("root"));

8. 添加打包命令

{
  "name": "parcel-example-react-helloworld",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
-  "test": "echo \"Error: no test specified\" && exit 1"
+  "start": "parcel index.html"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
   "react": "^16.2.0",
   "react-dom": "^16.2.0"
  },
  "devDependencies": {
    "babel-preset-react": "^6.24.1"
    "babel-preset-react": "^6.24.1",
    "parcel-bundler": "^1.0.3"  
  }
 }

9. 完成

运行

yarn start

npm start

在浏览器中打开 http://localhost:1234

打包过程会生产 .cache 和 dist 两个目录,如果是 git 工程,可以新建 .gitignore 文件忽略这两个目录:

.cache
dist
node_modules

GitHub 地址: https://github.com/justjavac/parcel-example/tree/master/react-helloworld

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
获取表单控件原始(初始)值的方法
Aug 21 Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 Javascript
jquery实现先淡出再折叠收起的动画效果
Aug 07 Javascript
jquery实现两边飘浮可关闭的对联广告
Nov 27 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
Apr 29 jQuery
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
JS实现字符串去重及数组去重的方法示例
Apr 21 Javascript
详解JS浏览器事件循环机制
Mar 27 Javascript
React实现todolist功能
Dec 28 Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 #Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 #Javascript
动态加载权限管理模块中的Vue组件
Jan 16 #Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 #Javascript
解析Angular 2+ 样式绑定方式
Jan 15 #Javascript
基于jquery的on和click的区别详解
Jan 15 #jQuery
仿淘宝JSsearch搜索下拉深度用法
Jan 15 #Javascript
You might like
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
js实现自定义路由
2017/02/04 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
javascript计算对象长度的方法
2017/10/25 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python守护进程(daemon)代码实例
2015/03/06 Python
简单了解什么是神经网络
2017/12/23 Python
Redis使用watch完成秒杀抢购功能的代码
2018/05/07 Python
python实现对输入的密文加密
2019/03/20 Python
python中利用matplotlib读取灰度图的例子
2019/12/07 Python
美国高街时尚品牌:OASAP
2016/07/24 全球购物
Java基础类库面试题
2013/09/04 面试题
幸福家庭标语
2014/06/27 职场文书
无犯罪记录证明
2014/09/19 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
材料采购员岗位职责
2015/04/03 职场文书
公司地址变更通知
2015/04/25 职场文书
甲午大海战观后感
2015/06/02 职场文书
详解 TypeScript 枚举类型
2021/11/02 Javascript
golang使用map实现去除重复数组
2022/04/14 Golang
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android