Parcel.js + Vue 2.x 极速零配置打包体验教程


Posted in Javascript onDecember 24, 2017

继 Browserify、Webpack 之后,又一款打包工具 Parcel 横空出世

Parcel.js 的官网有这样的自我介绍 “极速零配置Web应用打包工具”

简单接触了一下,单从效率上来说,确实要比 webpack 强上不少,可坑也挺多,未来升级之后应该会逐渐普及

官方文档:https://parceljs.org/getting_started.html

官方 GitHub:https://github.com/parcel-bundler/parcel

一、基本用法

Parcel 可以用 npm 或 yarn 安装,个人习惯用 npm,这篇博客将基于 npm 讲解

首先需要全局安装 Parcel.js    // 当前版本 1.3.0

npm install -g parcel-bundler

然后写一个配置文件...不对,这不是 webpack,这是 parcel, 零配置打包

直接创建项目目录,用写个一个简单的传统页面

然后在项目根目录打开命令行工具,输入以下命令

parcel index.html -p 3030

然后在浏览器中打开 http://localhost:3030/ 就能打开刚才开发的页面

上面的命令中 -p 用于设置端口号,如果不设置,则默认启动 1234 端口

parcel 支持热更新,会监听 html、css、js 的改变并即时渲染

// 实际上通过 src 引入的 css、js 无法热更新

开发完成后,输入以下命令进行打包

parcel build index.html

打包后会生成 dist 目录

桥豆麻袋,说好的打包呢?怎么还是这么多文件?

骚年莫急,这是用传统写法写的页面,连 package.json 都没有,接下来改造成模块化的项目,就能看到打包的效果了

好吧,那我先手动打开 index.html 看看效果...等等...为啥 css 没被加载?

这是因为打包后的路径都是绝对路径,放在服务器上没问题,如果需要本地打开,就得手动修改为相对路径

二、应用在模块化项目中

正片开始,首先将上面的项目改造成模块化项目

通过 npm init -y 命令创建一个默认的 package.json,并修改启动和打包命令

这样就可以直接通过 npm run dev 启动项目,npm run build 执行打包了

之前是全局安装的 parcel,实战中更推荐在项目中添加依赖

npm install parcel-bundler -S

上面是一个传统页面,使用 link 引入的 css

既然要改造为模块化项目,那就只需要引入一个 main.js,然后在 main.js 中引入其他的 css 和 js 文件

所以需要用到 import 等 ES6 语法,那就安装一个 babel 吧

npm install babel-preset-env -S

然后在根目录创建一个 .babelrc 文件,添加以下配置:

{
 "presets": ["env"]
}

再安装一个 css 转换工具,比如 autoprefixer

npm install postcss-modules autoprefixer -S

创建 .postcssrc 文件:

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

官方文档还推荐了一款编译 html 资源的插件 PostHTML,不过这里暂时不需要

自行改造代码,最后 npm run build 打包

可以看到 js 和 css 已经整合,其内容也经过了 babel 和 autoprefixer 的编译

三、在 Vue 项目中使用 Parcel

官方文档给出了适用于 react 项目的配方

但我常用的是 vue,研究了好久,终于找到了方法

依旧使用 index.html 作为入口,以 script 引入 main.js:

<!-- index.html -->
<body>
 <div id="app"></div>
 <script src="./src/main.js"></script>
</body>

// main.js

import 'babel-polyfill'
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './css/common.css'

Vue.config.productionTip = false

const vm = new Vue({
 el: '#app',
 router,
 render: h => h(App)
})

这里要推荐一个很厉害的插件 parcel-plugin-vue,它让 parcel 和 vue 成功牵手

再加上之前提到的 babel、autoprefixer,最后的 package.json 是这样的:

{
 "name": "ParcelVue",
 "version": "1.0.0",
 "description": "The project of parcel & vue created by Wise Wrong",
 "main": "main.js",
 "scripts": {
 "dev": "parcel index.html -p 3030",
 "build": "parcel build index.html"
 },
 "keywords": [
 "parcel",
 "vue"
 ],
 "author": "wisewrong",
 "license": "ISC",
 "devDependencies": {
 "autoprefixer": "^7.2.3",
 "babel-polyfill": "^6.26.0",
 "babel-preset-env": "^1.6.1",
 "parcel-bundler": "^1.3.0",
 "parcel-plugin-vue": "^1.4.0",
 "postcss-modules": "^1.1.0",
 "vue-loader": "^13.6.1",
 "vue-style-loader": "^3.0.3",
 "vue-template-compiler": "^2.5.13"
 },
 "dependencies": {
 "vue": "^2.5.13",
 "vue-router": "^3.0.1"
 }
}

一定记得在根目录创建 .postcssrc 和 .babelrc 文件

然后 npm install 安装依赖, npm run dev 启动项目,npm run build 打包项目

总结

以上所述是小编给大家介绍的Parcel.js + Vue 2.x 极速零配置打包体验教程,希望对大家有所帮助,如果大家有所帮助。

Javascript 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
JavaScript 面向对象编程(2) 定义类
May 18 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
Oct 09 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
May 17 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
Node.js批量给图片加水印的方法
Nov 15 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
Dec 10 Javascript
javascript的this关键字详解
May 20 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
vue实现广告栏上下滚动效果
Nov 26 Vue.js
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 #jQuery
解决Vue 浏览器后退无法触发beforeRouteLeave的问题
Dec 24 #Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 #Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 #Javascript
vue项目常用组件和框架结构介绍
Dec 24 #Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 #Javascript
JS生成随机打乱数组的方法示例
Dec 23 #Javascript
You might like
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
JQuery的Alert消息框插件使用介绍
2010/10/09 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
2018/08/27 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python中关于for循环的碎碎念
2017/06/30 Python
django限制匿名用户访问及重定向的方法实例
2018/02/07 Python
Python使用Selenium爬取淘宝异步加载的数据方法
2018/12/17 Python
python实现维吉尼亚加密法
2019/03/20 Python
python简单验证码识别的实现方法
2019/05/10 Python
django的ORM操作 增加和查询
2019/07/26 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?
2015/08/04 面试题
linux面试题参考答案(2)
2015/12/06 面试题
CAD制图人员的自荐信
2014/02/07 职场文书
物理研修随笔感言
2014/02/14 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
班主任开场白
2015/06/01 职场文书
如何在Python项目中引入日志
2021/05/31 Python
修改Nginx配置返回指定content-type的方法
2022/09/23 Servers