继webpack后又一打包神器Parcel

前言:

  在继grunt、gulp实现自动化构建之后,webpack又引领前端打包潮流,众所周知的是,vue-cli的脚手架就是基于webpack进行项目打包的。而webpack还在上升的势头的时候,又一打包神器横空出世——parcel。

Parcel

快速,零配置的 Web 应用程特性  

  快速打包

    Parcel 使用工作进程启用多核编译,并具有文件系统缓存,即使在重新启动后也可快速重新构建。
  打包所有资源
    Parcel 支持JS,CSS,HTML,文件资源等等 - 不需要安装任何插件。
  自动转换
    在需要时,代码使用 Babel,PostCSS 和 PostHTML 自动转换 - 即使是 node_modules。
  零配置代码拆分
    Parcel 使用动态 import() 语法拆分您的输出包,所以只加载初始加载时所需的内容。
  模块热替换
    当你在开发过程中进行更改时,Parcel 会自动更新浏览器中的模块,不需要进行任何配置。
  友好的错误记录
    遇到错误时,Parcel 会以语法高亮的形式打印的代码帧,以帮助你查明问题。

为啥用 parcel?

  现在有很多Web应用程序打包工具,包括webpack 和 browserify。所以,我们为什么还需要一个呢?主要的原因是围绕开发者的经验。 

  很多打包工具都围绕配置和插件进行构建的,因此看到有500行以上配置的应用程序正常运行并不罕见。这种配置不仅繁琐和费时,而且也很难得到正确的配置,必须为每个应用程序复制。通常情况下,这可能导致次优化的应用程序发送到生产环境。parcel 被设计为零配置:只要将它指向你的应用程序的入口点,它就能做正确的事情。
  现有的打包工具大多都执行得慢,具有很多文件和依赖的大型应用将花费数分钟去构建,随着时间的推移,这将会相当痛苦的事情。监听文件变更能帮助重新编译,当时初始构建的时候通常还是会很慢。parcel 利用现代的多核处理能力和工作线程去并行编译你的代码。这导致了初始构建的速度极大的提升。它还有一个文件系统缓存,可以保存每个文件的编译结果,以便更快的后续启动。
  最后,现有的打包工具都是围绕字符串加载/转换进行构建的,其中转换需要一个字符串,解析它,然后进行一些转换,之后再次生成代码。通常这最终导致许多解析和代码生成在单个文件上运行,这是低效的。相反,parcel 的转换工作在 AST上,所以这样每个文件就有一个解析,多个转换和一个代码生成。

Parcel 是如何工作的? 

  Parcel 将 资源 树转换成 包(bundles) 树。许多其它的打包工具基本上是基于 JavaScript 资源,还有附加在其上的其它格式的资源。例如,在 JS 文件中内联成字符串。 Parcel 是对文件类型无感知的,它能按你所期待的方式那样与任意类型的资源工作,且毋须配置。
  构建资源树
  Parcel 接受单个入口资源作为输入,可以是任意类型:JS、HTML、CSS、图片文件等等。在 Parcel 中定义了许多不同的资源类型,它知道如何去处理特定的文件类型。资源会被解析,资源的依赖会被提取,资源会被转换成最终编译好的形态。此过程创建了一个资源树。
  构建文件束树
  一旦资源树被构建好,资源会被放置在文件束树中。首先一个入口资源会被创建成一个文件束,然后动态的 import() 会被创建成子文件束 ,这引发了代码的拆分。当不同类型的文件资源被引入,兄弟文件束就会被创建。例如你在 JavaScript 中引入了 CSS 文件,那它会被放置在一个与 JavaScript 文件对应的兄弟文件束中。如果资源被多于一个文件束引用,它会被提升到文件束树中最近的公共祖先中,这样该资源就不会被多次打包。
  打包
  在文件束树被构建之后,每个文件束都会被 packager 写到一个特定文件类型的文件中。packagers 知道如何从每个资源中将代码合并起来,生成到最终被浏览器加载的文件中。
[ps:基于官网https://parceljs.org/进行的总结]

入门Demo

  一、初始化npm

npm init

  二、添加babel 并安装 babel-preset-env依赖

  1.新建.babelrc 文件 

{
  "presets": [
    "env"
  ]
}

  2.安装依赖

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

  三、添加parcel

npm install parcel-bundler --save-dev

  四、最后生成的package.json文件大概就这样:

{
  "name": "parcel-demo",
  "version": "1.0.0",
  "description": "parcel",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start":"parcel index.html"
  },
  "keywords": [
    "parcel"
  ],
  "author": "aaron",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-env": "^1.6.1",
    "parcel-bundler": "^1.2.0"
  }
}

[ ps:给npm添加启动项:

"start":"parcel index.html"

]  

  五、最后根据官网新建index.html,index.js等文件,然后命令行打包,然后运行npm  start 或 parcel index.html 启动,简单的demo就生成了。

  index.html / index.js / main.js / main.css

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hello Parcel</title>
</head>
<body>
<h1 class="main">parcel</h1>
<script src="./js/index.js"></script>
</body>
</html>
import main from ‘./main‘;

main();
import classes from ‘../css/main.css‘

export default ()=>{
    console.log(classes);
}
.main{
    background: url("../images/parcel.png");
    color:red;
}

  截图:

更多

  

  如果报了上面那些错误。貌似node.js 7.6版本以下对await / async 不支持,所以在执行打包时需要升级node.js版本。

  parcel中文官网:http://www.parceljs.io/

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

  关于parcel的更多使用方法还需深入了解才行,每一个打包工具我都觉得都有它的独特魅力。

  期待parcel的发展......

  

时间: 2024-07-31 22:37:52

继webpack后又一打包神器Parcel的相关文章

Android 新一代多渠道打包神器

关于作者: 李涛,腾讯Android工程师,14年加入腾讯SNG增值产品部,期间主要负责手Q动漫.企鹅电竞等项目的功能开发和技术优化.业务时间喜欢折腾新技术,写一些技术文章,个人技术博客:www.ltlovezh.com . ApkChannelPackage是一种快速多渠道打包工具,同时支持基于V1和V2签名进行渠道打包.插件本身会自动检测Apk使用的签名方法,并选择合适的多渠道打包方式,对使用者来说完全透明. Github地址: https://github.com/ltlovezh/Apk

webpack到底是怎么打包的,多入口,草稿

webpack.config module.exports={ entry:['entry1.js','entry2.js'], output:{ path:'./dist', filename:'output.js' } } 豪不意外,对于普通的多入口webpack.config文件,打包出来的文件和单入口文件一样,把两个文件作为自执行函数的参数放在数组传了进去,不过这两个文件的位置是1和2(最开始以为是0和1对吧),位置0的是webpack自己生成的一个函数.是长这个样子的. * 0 */

微软继MVC5后,出现ASP.NET VNEXT

vNext又称MVC 6.0,不再需要依赖System.Web,占用的内存大大减少(从前无论是多么简单的一个请求,System.Web本身就要占用31KB内存). 可以self-host模式运行,网站不再需要依赖IIS而运行,由此从此可以快速向客户演示开发进度,以及更好地支持真正跨平台(Linux.Mac.Unix). Web Api.Web Pages与MVC完全融为一体,统称MVC 6.0.在过去,输出JSON,既可以使用MVC自带的returnJSON,也可以使用Web Api,这样分而治

iOS证书过期后,xcode打包ipa闪退。使用控制台方式来打包

iOS证书过期后,xcode打包ipa闪退.使用控制台方式来打包 分类: iOS开发 2015-02-09 00:57 224人阅读 评论(0) 收藏 举报 xcode最新版本现在通过界面打包都需要登陆网站验证账号信息, 如果账号过期了,目前我碰到的问题是xcode直接“意外退出”了,也没提示, 后来才发现是企业版账号到期了,需要续费. 搜索下,发现用控制台生成ipa的方式,不会进行账号验证,即时过期了,也可以继续导出ipa. 命令如下: xcodebuild clean -project OB

webpack&#20998;&#31163;css&#21333;&#29420;&#25171;&#21253;

webpack分离css单独打包 字数285 阅读0 评论0 喜欢0 瞎扯 webpack 把所有的资源都当成了一个模块, CSS,Image, JS 字体文件 都是资源, 都可以打包到一个 bundle.js 文件中.但是有时候需要把样式 单独的打包成一个文件, 然后放到 CND上, 然后缓存到浏览器客户端中 这个操作很简单的,只需要一个插件就好了,就是extract-text-webpack-plugin 1. 安装extract-text-webpack-plugin npm instal

Webpack - CommonJs &amp; AMD 模块打包器

Webpack 是一个 CommonJs & AMD 模块打包器.可以把你的 JavaScript 代码分离为多个包,在需要的时候进行加载,支持预处理文件,例如 json, jade, coffee, css, less 等等. 官方网站      GitHub 您可能感兴趣的相关文章 网站开发中很有用的 jQuery 效果[附源码] 分享35个让人惊讶的 CSS3 动画效果演示 十分惊艳的8个 HTML5 & JavaScript 特效 Web 开发中很实用的10个效果[源码下载] 12

安装webpack后,执行webpack -v命令时报错:SyntaxError: Block-sc

安装webpack后,执行webpack -v命令时报错如下: [[email protected] ~]# webpack -v /usr/local/node-v4.4.7-linux-x64/lib/node_modules/webpack/bin/webpack.js:3 let webpackCliInstalled = false; ^^^ SyntaxError: Block-scoped declarations (let, const, function, class) not

webpack渐入佳境系列一:webpack环境配置与打包基础【附带各种 &quot;坑&quot; 与解决方案!持续更新中...】

首先介绍传统模块化开发的主流方案: 1.基与CMD的sea.js,玉伯提出的解决方案,据说原来京东团队在使用.用时才定义,就近加载.最近在浏览seajs官方文档时发现seajs的域名已经在转卖,惊恐万分之余又想起了那句话,国内团队开发的技术,不是十全九美的最好不要用.国内高强度的生活节奏与压力使得日常维护变得很吃力.(想到这里,不禁为vue捏了一把汗,不过还好vue的前景非常光明!). 2.基于AMD的require.js,之前在用.提前声明与定义.国外团队维护. 3.基于commonJS的we

【JavaScript】 Webpack安装及文件打包

背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已.经过多方调研,终于发现如何实现webpack的文件打包功能. 准备 在使用webpack之前,必须先要安装nodejs和npm. 安装完npm后,由于npm国内访问非常慢,可以设置为从淘宝的镜像下载各种资源包. npm config set registry http://registry.cnpm