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 trim() 功能源代码
Feb 14 Javascript
提示$ is not defined错误分析及解决
Apr 09 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
Bootstrap标签页(Tab)插件使用方法
Mar 21 Javascript
ES6新特性三: Generator(生成器)函数详解
Apr 21 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
Sep 27 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
原生实现一个react-redux的代码示例
Jun 08 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 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
分享php多功能图片处理类
2016/05/15 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
微信小程序自定义支持图片的弹窗
2020/12/21 Javascript
pycharm 使用心得(三)Hello world!
2014/06/05 Python
Python中除法使用的注意事项
2014/08/21 Python
基于Python __dict__与dir()的区别详解
2017/10/30 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
pygame实现打字游戏
2021/02/19 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
基于SpringBoot构造器注入循环依赖及解决方式
2020/04/26 Python
python如何调用字典的key
2020/05/25 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
史上最全面的Java面试题汇总!
2015/02/03 面试题
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
2014年会计工作总结
2014/11/27 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android