详解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 相关文章推荐
javaScript同意等待代码实现心得
Jan 01 Javascript
基于jquery实现图片广告轮换效果代码
Jul 07 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 Javascript
js实现ArrayList功能附实例代码
Oct 29 Javascript
jQuery判断数组是否包含了指定的元素
Mar 10 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 Javascript
vue实现动态数据绑定
Apr 28 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
PHP加密解密类实例代码
2016/07/20 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
js中取得变量绝对值的方法
2015/01/03 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
跟老齐学Python之??碌某?? target=
2014/09/12 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python编程使用*解包和itertools.product()求笛卡尔积的方法
2017/12/18 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python中利用zfill方法自动给数字前面补0
2018/04/10 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
Python列表解析配合if else的方法
2018/06/23 Python
python dict 相同key 合并value的实例
2019/01/21 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
医院门卫岗位职责
2013/12/30 职场文书
求职简历的自我评价
2014/01/31 职场文书
便利店促销方案
2014/02/20 职场文书
红白喜事主持词
2015/07/06 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL