Parcel:常见技术栈的集成方式
前言
Parcel 是什么
Parcel 是一个前端构建工具,Parcel 官网 将它定义为极速零配置的Web应用打包工具。没错,又是一个构建工具,你一定会想,为什么前端的构建工具层出不穷,搞那么多工具又要花时间去学习,真的有意义吗?在 webpack 已经成为前端构建工具主流的今天,一个新的工具能有什么优势来站稳脚跟呢?
为什么要用 Parcel
一个好的打包工具在前端工程中占着比较重要的地位。然,何谓之好?或功能强大,或简单易用,或提高效率,或适合自己。在时代不断发展中,一个个好的工具正在被一个更好的工具所替代。随着对 webpack 复杂配置的吐槽声越来越多,Parcel 打着 "快速、零配置" 的旗子出来了。
Parcel 的特性
- 快速打包:启用多核编译,并具有文件系统缓存
- 打包所有资源:支持JS,CSS,HTML,文件资源等等 - 不需要安装任何插件
- 自动转换:使用 Babel,PostCSS 和 PostHTML 自动转换
- 零配置代码拆分:使用动态 import() 语法拆分您的输出包,只加载初始加载时所需的内容
- 模块热替换:不需要进行任何配置
- 友好的错误记录:以语法高亮的形式打印的代码帧,以帮助你查明问题
如何使用
快速使用
全局安装 npm i parcel-bundler -g 或 yarn add parcel-bundler global
Parcel 使用一个文件作为入口,最好是 HTML 或 JavaScript 文件,我们在项目中新建 index.html 文件,直接运行命令 parcel index.html 即可启动本地服务器
在浏览器中访问 http://localhost:1234/ ,可以通过 parcel index.html -p 8888 重新设置端口号。
无需配置文件!
Parcel 支持 CommonJS 模块语法、ES6 模块语法、在 js 文件中导入 node 模块或 css、在 css 中使用 import 等,也都无需配置文件!
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Parcel</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Hello Parcel</h1>
<script src="src/js/index.js"></script>
</body>
</html>
// src/js/index.js
const main1 = require('./main1.js'); // 支持 CommonJS 模块语法
import main2 from './main2.js'; // 支持 ES6 模块语法
import '../css/index.css'; // 支持在 js 中导入 css
main1();
main2();
上面只是简单的使用了 Parcel,但在实际项目中,我们会用到各种技术栈,下面我们来看看 Parcel 如何集成各种技术栈的。
注意:Parcel 里使用了 async await,因此需要 node 7.6 以上的版本才支持
集成技术栈
首先在项目下创建 package.json 、.babelrc、以及 index-react.html、index-vue.html、index-ts.html 三个作为各自技术栈 demo 的入口文件。
在 package.json 中添加以下命令
"scripts": {
"react": "parcel index-react.html",
"vue": "parcel index-vue.html",
"ts": "parcel index-ts.html"
}
React
安装 React 的相关依赖 npm i -S parcel-bundler react react-dom babel-preset-env babel-preset-react
在 .babelrc 中添加
{
"presets": ["env","react"]
}
这就是上面讲到的 Parcel 的特性:自动转换。该文件是让 Parcel 自动转换 ES6 和 React JSX。
<!-- index-react.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Parcel React</title>
<meta charset="UTF-8">
</head>
<body>
<div id="react-app"></div>
<script src="src/react/index.js"></script>
</body>
</html>
// src/react/index.js
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class Hello extends Component {
render() {
return <h1>Hello React</h1>;
}
}
ReactDOM.render(<Hello />, document.getElementById('react-app'));
运行命令 npm run react 打开 http://localhost:1234/ 即可看到 Hello React
Vue
就在不久前,Parcel 终于支持 .vue 文件了,只需要引入一个包 parcel-plugin-vue,不需要任何配置,即可打包 Vue 了。
安装 Vue 相关依赖,npm i -S vue parcel-plugin-vue
<!-- index-vue.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Parcel Vue</title>
<meta charset="UTF-8">
</head>
<body>
<div id="vue-app"></div>
<script src="src/vue/index.js"></script>
</body>
</html>
// src/vue/index.js
import Vue from 'vue';
import App from './app.vue';
new Vue({
el: '#vue-app',
render: h => h(App)
})
<!-- src/vue/app.vue -->
<template>
<div>
<h1>Hello Vue</h1>
</div>
</template>
运行命令 npm run vue 打开 http://localhost:1234/ 即可看到 Hello Vue
TypeScript
集成 TypeScript 也非常简单,只需要安装 typescript 模块即可,也无需配置。
安装 TypeScript 相关依赖,npm i -S typescript
<!-- index-ts.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<title>Parcel TypeScript</title>
<meta charset="UTF-8">
</head>
<body>
<h1 id="ts-app"></h1>
<script src="src/typescript/index.ts"></script>
</body>
</html>
interface Name {
value: string;
}
function showName(name: Name){
document.getElementById('ts-app').innerHTML = 'Hello ' + name.value;
}
showName({value: 'TypeScript'});
运行命令 npm run ts 打开 http://localhost:1234/ 即可看到 Hello TypeScript
Sass
将 Sass 在上面技术栈中使用也非常简单,只需要安装 node-sass 模块即可,也无需配置。
安装 Sass 相关依赖,npm 可能会下载不成功,这里使用 cnpm 来安装,cnpm i -S node-sass
在 src/vue/app.vue 中来使用 Sass
<!-- src/vue/app.vue -->
<template>
<div class="main">
<h1>Hello Vue</h1>
</div>
</template>
<style lang="scss">
@import '../sass/main.scss';
</style>
.main{
h1{
color: #0099ff;
}
}
再次运行命令 npm run vue 即可看到带有蓝色字体的 Hello Vue
以上的 demo 源码地址:parcel-demo
生产环境
- 设置环境变量:
parcel build index.html NODE_ENV=production - 设置输出目录:
parcel build index.html -d build/output - 设置要提供服务的公共 URL:
parcel build index.html --public-url ./ - 禁用压缩:
parcel build index.html --no-minify - 禁用文件系统缓存:
parcel build index.html --no-cache
疑问
- 输出目录里是否可以再分子目录,例如 css / js / img 等?
- 页面引用的 html 被打包后也会重命名成很长的一串,是否可以不重命名?
前端情报局
鉴于最近 Parcel 打着零配置的口号俘获了不少前端开发者的心,并且伴随着吐槽 webpack 使用配置复杂的声音。webpack 核心开发者特意解释道,webpack v4.0.0-alpha.1 中加入了 mode 这个配置,这使得很多复杂繁琐的配置(诸如: sourcemaps、 tree shaking,、minification、scope hoisting)webpack 都替我们做好了,对于使用者来说,基本上也是零配置了。
更多文章:lin-xin/blog
Parcel:常见技术栈的集成方式的更多相关文章
- 如何使用Microsoft技术栈
Microsoft技术栈最近有大量的变迁,这使得开发人员和领导者都想知道他们到底应该关注哪些技术.Microsoft自己并不想从官方层面上反对Silverlight这样的技术,相对而言他们更喜欢让这种 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
- SpringBoot技术栈搭建个人博客【后台开发】
前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...
- Java 技术栈
JAVA是一个面向对象的编程语言,由SUN公司的程序员所开发.它不仅吸收了C++的各种优点,而且还撇弃了C++中难以理解的概念,如多继承.指针等:因此JAVA语言具有功能强大且简单易用两个特征, JA ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈
通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念 ...
- .Net Web开发技术栈 收藏
原文:http://www.cnblogs.com/1996V/p/7700087.html#!comments 有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎 ...
- [转帖]开源的监控技术栈除了ELK,还有InfluxData的TICK
开源的监控技术栈除了ELK,还有InfluxData的TICK https://cloud.tencent.com/developer/news/357119 来源 | Influxdata 译者 ...
- Java-技术专区-技术栈分析辨证方法
1.好多公司动不动就JVM.高并发.分布式.微服务等等,我没有实际经验. 2.从事Java开发三年了,目前的职位是高级Java工程师,感觉技术和工资都到了瓶颈,对以后的发展方向有些迷茫. 3.加班时间 ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
随机推荐
- (11.20)Java小知识!
经过一段时间的学习,我也终于来到了Java语言的核心篇,也就是对象与类的学习,今天想要和大家分享的是关于类的小知识点. 1.类的声明: 类可以看成创建Java对象的模板.类亦可以理解成Java一种 ...
- React+Redux实现追书神器网页版
引言 由于现在做的react-native项目没有使用到redux等框架,写了一段时间想深入学习react,有个想法想做个demo练手下,那时候其实还没想好要做哪一个类型的,也看了些动漫的,小说阅读, ...
- overflow-x: scroll;横向滑动详细讲解
overflow-x: scroll;横向滑动(移动端使用详解) css3 , ie8以上 <!DOCTYPE html> <html lang="en"> ...
- 使用vue2.x+webpack+vuex+sass+axios+elementUI等快速搭建前端项目框架
一.本文将分享如何快速搭起基于webpack+vue的前端项目框架,利用vue的自己的脚手架工具vue-cli搭建起基本的环境配置,再通过npm包管理工具引入相应的依赖来完善项目的各种依赖框架.下面是 ...
- postman接口测试系列:接口参数化和参数的传递
接着上一个章节时间戳和加密继续,上一节中我们使用Pre-Request Script可以正确获取时间戳和加密后的数据,接口响应结果也达到了预期目标.这里先简单说明一下接口的用例设计的测试点,截图所示 ...
- 十六、Hadoop学习笔记————Zookeeper实战
所有服务器都会先将自己的服务器信息注册到servers中,然后每台服务器都会尝试注册master,哪台注册成功,则哪台就是master服务器. 所有的服务器都会关注master节点的删除事件,这样通过 ...
- C/C++中如何接收return返回来的数组元素
我们知道return语句作为被调用函数的结束,返回给调用者函数值.一般来说,是返回一个函数值,像一个int, double,char等类型的数据,当然也可以是他们的指针.但是当我们遇到要返回很多数怎么 ...
- Mysql--数据的操作
1.插入数据 1.1 插入完整数据记录 语法1: 例子: 语法2: 例子: 1.2 插入数据记录一部分 语法: 例子: 1.3 插入多条数据记录 1.插入多条完整的数据 语法: 例子: 插入多条部 ...
- 项目实战5—企业级缓存系统varnish应用与实战
企业级缓存系统varnish应用与实战 环境背景:随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常 ...
- 深入理解php底层:php生命周期
1.PHP的运行模式: PHP两种运行模式是WEB模式.CLI模式.无论哪种模式,PHP工作原理都是一样的,作为一种SAPI运行. 1.当我们在终端敲入php这个命令的时候,它使用的是CLI. 它就像 ...