详解Vue快速零配置的打包工具——parcel


Posted in Javascript onJanuary 16, 2018

本文介绍了Vue快速零配置的打包工具——parcel,分享给大家,具体如下:

特性

  1. 快速打包
  2. 打包所有资源
  3. 自动转换
  4. 代码拆分
  5. 模块热替换
  6. 友好的错误记录

如何工作

Parcel 将 资源 树转换成 包(bundles) 树。许多其它的打包工具基本上是基于 JavaScript 资源,还有附加在其上的其它格式的资源。例如,在 JS 文件中内联成字符串。 Parcel是对文件类型无感知的,它能按你所期待的方式那样与任意类型的资源工作,且毋须配置。

构建资源树

Parcel 接受单个入口资源作为输入,可以是任意类型:JS、HTML、CSS、图片文件等等。在 Parcel 中定义了许多不同的资源类型,它知道如何去处理特定的文件类型。资源会被解析,资源的依赖会被提取,资源会被转换成最终编译好的形态。此过程创建了一个资源树。

构建文件束树

一旦资源树被构建好,资源会被放置在文件束树中。首先一个入口资源会被创建成一个文件束,然后动态的 import() 会被创建成子文件束 ,这引发了代码的拆分。当不同类型的文件资源被引入,兄弟文件束就会被创建。例如你在 JavaScript 中引入了 CSS 文件,那它会被放置在一个与 JavaScript 文件对应的兄弟文件束中。如果资源被多于一个文件束引用,它会被提升到文件束树中最近的公共祖先中,这样该资源就不会被多次打包。

打包

在文件束树被构建之后,每个文件束都会被 packager 写到一个特定文件类型的文件中。packagers 知道如何从每个资源中将代码合并起来,生成到最终被浏览器加载的文件中。

配置

初始化项目

npm install -g parcel
 mkdir xxx && cd xxx && npm init -y

转换

Babel

npm install babel-preset-env --save-dev

根目录配置.babelrc

{
  "presets": ["env"]
 }

PostCSS

npm install postcss-modules autoprefixer --save-dev

根目录配置.postcssrc

{
  "modules": true,
  "plugins": {
   "autoprefixer": {
    "grid": true
   }
  }
 }

支持vue

npm install parcel-plugin-vue --save-dev

添加entry

import App from './App.vue'
 import router from './router/index.js'
 import './assets/js/rem.js'
 window.onload = () => {
  const vm = new Vue({
   el: '#app',
   router,
   render: h => h(App)
  })
 }

配置index.html

<body>
  <div id="app"></div>
  <script src="入口文件"></script>
 </body>

配置路由(代码拆分--懒加载)

{
   path: 'home',
   component: () =>import('../pages/home.vue')
 }

import()返回的是一个promise,所以也可以用 async/await 语法,当你想在本地使用 async/await 语法,请引入 babel-polyfill

区分生产环境和开发环境,配置package.json.

dev --- 开发环境

build --- 生产环境

"scripts": {
   "dev": "parcel index.html -p 3700",
   "build": "parcel build index.html"
  }

大功告成

访问http://localhost:3700/home

详解Vue快速零配置的打包工具——parcel

此demo是vue + parcel + grid +stylus完成 : parcel-vue

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

Javascript 相关文章推荐
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
js实现的折叠导航示例
Nov 29 Javascript
jQuery判断多个input file 都不能为空的例子
Jun 23 Javascript
基于javascript html5实现3D翻书特效
Mar 14 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
Jan 21 Javascript
微信小程序 MD5的方法详解及实例代码
Mar 10 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
Jul 06 Javascript
vue项目如何刷新当前页面的方法
May 18 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
js使用文件流下载csv文件的实现方法
Jul 15 Javascript
js实现简单图片拖拽效果
Feb 22 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
vue2.0 父组件给子组件传递数据的方法
Jan 15 #Javascript
You might like
hessian 在PHP中的使用介绍
2010/12/13 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
开发Vue树形组件的示例代码
2017/12/21 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
讲解Python中的递归函数
2015/04/27 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
客户经理岗位职责
2013/12/08 职场文书
小学生元旦感言
2014/02/26 职场文书
新品发布会主持词
2014/04/02 职场文书
小学生手册家长评语
2014/04/16 职场文书
社会实践的活动方案
2014/08/22 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
数学教师个人总结
2015/02/06 职场文书
红歌会主持词
2015/07/02 职场文书
公司业务员管理制度
2015/08/05 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
vue实现Toast组件轻提示
2022/04/10 Vue.js