文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Parcel 2 + Vue 3】从0到1搭建一款极快,零配置的Vue3项目构建工具

2024-12-03 07:32

关注

实战

既然,从0开始,那么我们肯定需要先了解Parcel 2是什么东东?

一、介绍Parcel 2

了解Parcel 2之前呢,你得知道它上一个版本Parcel 1是啥。这是官方网址:https://parceljs.org/

官方是这样介绍它的:

  1. Parcel使用工作进程来启用多核编译,并且有一个文件系统缓存,即使在重新启动后也可以快速重建。
  2. Parcel提供了对JS、CSS、HTML、文件资产等的现成支持—不需要插件。
  3. 当需要时,代码会使用Babel、postss和posthml自动转换,甚至是node_modules。
  4. 使用动态import()语法,Parcel拆分输出包,以便只在初始加载时加载所需的内容。
  5. 在开发过程中进行更改时,Parcel会自动更新浏览器中的模块,无需配置。
  6. Parcel在遇到错误时打印语法高亮显示的代码帧,以帮助您确定问题。

看完这些特性之后,是不是感觉跟Vite很相似。https://parceljs.org/getting_started.html这是文档地址,如果还有小伙伴没有接触Parcel的,那么推荐你赶快试试去。今天,我们就不过多地介绍Parcel 1了,主要是为了抛砖引玉,为了咱的主角Parcel 2。Parcel 1都这么强大了,那么Parcel 2不就更厉害了吗?别急!听我细细道来。

如果你在找Parcel 2的官网怎么也没找到,那就对了。https://github.com/parcel-bundler/parcel/tree/v2,你可以打开Parcel 2的github网址。我们滑到Features一栏,你会发现介绍的跟Parcel 1一样,我去~ 还能再懒点吗?整出来一个2,特性介绍还跟1一模一样。莫着急,我们往下看会看到一段文字:

踏破特写无觅处,得来全不费工夫。原来官网在这里,我们毫不留情地打开了它。

这是官方对Parcel的解释,总之一点,记住它是一个web应用捆绑包就可以了。我们先不看侧边栏菜单那些内容,先看看Parcel 2到底更新了啥?肯定不只是那些特性。我们打开顶部Blog栏,也就是这个网址https://v2.parceljs.org/blog/alpha1/,

也就是Parcel 2.0.0-alpha.1 。我们会看到下方这样介绍。

看了看日子,是2019年-09-13年推出的,这日子到现在一年多了。看看到底更新了啥?

看到这样的解释,是不是很迫不及待了。不要着急,我们再往下看。

Parcel 2是可配置的。Parcel 2 CLI内置的默认配置足以满足大多数应用程序的需求,并包括Parcel 1支持的所有功能以及更多功能,但是Parcel 2支持通过专门为每个Parcel核心设计的一整套插件类型,通过其他功能扩展核心阶段。

下面还有很多特性解释,我这里因为篇幅的原因,就不过多解释了。其实我看来,最具特色的更新是Transformers。Transformers将代码和其他资产从一种语言编译成另一种语言,或者只是以某种方式转换文件。例如,TypeScript转换器将TypeScript编译为JavaScript,而Babel转换器将JavaScript转换为其他JavaScript。转换程序还负责从代码中提取依赖项,例如import语句和要求调用,这些依赖关系将传递回解析器,另一个转换程序,依此类推,直到为应用程序构建完整的资产图。另外,为什么重点说Transformers呢?是因为本篇文章使用了@parcel/transformer-vue,在这里解释Transformers有助于下面理解。

看完了第一个Alpha版本!我们来看第一个Beta版。

这是Parcel 2的第一个beta版本。这意味着它比每晚或alpha版本更稳定,但是在完全稳定的版本发布之前,仍需要进行一些更改。特别是,beta表示我们不打算更改大多数面向用户的API。例如配置格式(在package.json和.parcelrc中)和CLI参数。

二、入门Parcel 2

我们从这里开始https://v2.parceljs.org/getting-started/webapp/,从如何安装Parcel 2。

  1. yarn add -D parcel@next 

OR

  1. npm install -D parcel@next 

我们可以这样使用它,当然这里是以React.js项目为例,你还可以安装其他语言。

package.json

  1.   "name""my-project"
  2.   "scripts": { 
  3.     "start""parcel serve index.html"
  4.     "build""parcel build index.html" 
  5.   }, 
  6.   "dependencies": { 
  7.     "react""^16.13.1"
  8.     "react-dom""^16.13.1" 
  9.   }, 
  10.   "devDependencies": { 
  11.     "parcel""next" 
  12.   } 

index.html

  1.  
  2.  
  3.    
  4.     "utf-8" /> 
  5.     My Parcel Project 
  6.    
  7.  
  8.    
  9.     "root">
 
  •     "module" src="./index.js"
  •    
  •  
  • index.js

    1. import React from "react"
    2. import { render } from "react-dom"
    3.  
    4. render(, document.getElementById("root")); 

    在上面的示例中,您可以看到两个命令,开发命令parcel serve index.html和parcel build index.html用于创建生产版本。

    示例中的命令以index.html作为入口点,而不是JavaScript文件作为入口点,这与其他捆绑程序不同。使用HTML文件作为入口点使Parcel易于使用,因为它可以直接从HTML文件中检测依赖关系,并将所有检测到的依赖关系自动捆绑到各自的捆绑包中,而无需进行任何配置。Parcel甚至可以自动执行更高级的功能,例如差异服务和编译内联脚本和样式,而无需任何配置。

    这里是不是跟Vite很相似呢!

    三、使用Parcel 2搭建一个Vue3项目

    既然觉得跟Vite这么相似,那么我们要不也搭建一个项目构建工具?首先,我们来到了这里https://v2.parceljs.org/languages/vue/。惊奇的发现这样一段话:

    既然都这么说了,我们就用Vue 3。官网说,Parcel支持Vue,而无需任何其他配置。顿时爱了!

    话不多说,我们开始开发。

    我们参照VueCLI的项目目录开始创建文件以及文件夹。(我会在文末放出源码地址,我这里先给出大概的文件目录)

    我们来直接看package.json文件。

    1.   "name""parcel-vue-app"
    2.   "version""1.0.3"
    3.   "description""Blazing fast, zero configuration vue application bundler."
    4.   "keywords": [ 
    5.     "parcel"
    6.     "vue" 
    7.   ], 
    8.   "private"false
    9.   "author": { 
    10.     "name""maomincoding"
    11.     "email""17864296568@163.com"
    12.     "url""https://www.maomin.club" 
    13.   }, 
    14.   "repository": { 
    15.     "type""git"
    16.     "url""https://github.com/maomincoding/parcel-vue-app.git" 
    17.   }, 
    18.   "license""MIT"
    19.   "engines": { 
    20.     "node"">=14" 
    21.   }, 
    22.   "source""src/main.js"
    23.   "targets": { 
    24.     "index": { 
    25.       "includeNodeModules": { 
    26.         "axios"true
    27.         "vue"true
    28.         "vue-router"true
    29.         "vuex"true
    30.         "mockjs"false 
    31.       }, 
    32.       "context""browser"
    33.       "distDir""./buildDir"
    34.       "outputFormat""esmodule"
    35.       "scopeHoist"false
    36.       "optimize"true
    37.       "publicUrl""/" 
    38.     } 
    39.   }, 
    40.   "scripts": { 
    41.     "serve""parcel ./public/index.html --port 3000 --no-source-maps"
    42.     "build""parcel build ./public/index.html --no-source-maps" 
    43.   }, 
    44.   "devDependencies": { 
    45.     "@parcel/transformer-image""2.0.0-beta.2"
    46.     "@parcel/transformer-sass""2.0.0-beta.2"
    47.     "@parcel/transformer-vue""2.0.0-beta.2"
    48.     "@vue/compiler-sfc""^3.0.9"
    49.     "babel-eslint""^10.1.0"
    50.     "eslint""^7.23.0"
    51.     "eslint-plugin-vue""^7.8.0"
    52.     "mockjs""^1.1.0"
    53.     "parcel""^2.0.0-beta.2"
    54.     "sass""^1.32.8" 
    55.   }, 
    56.   "dependencies": { 
    57.     "axios""^0.21.1"
    58.     "vue""^3.0.9"
    59.     "vue-router""4"
    60.     "vuex""^4.0.0" 
    61.   } 

    为什么我这里会给出package.json文件呢?第一点呢?主要是让大家看下我安装的依赖就知道我要干什么了第二点呢?也是最重要的一点。我们知道像Webpack、VueCLI、Vite这些工具都有自己的配置文件,那么Parcel 2在哪配置呢?啥?不是说Parcel 2是零配置吗?我可不想背锅啊!官方这样解释:

    也就是说定制化配置你可以在package.json文件中配置。其他详情配置参数你可以查看这里https://v2.parceljs.org/configuration/package-json/。

    首先,我们来解读下上面的package.json文件。我们的目的是为了搭建像Vite这样的项目构建工具。那么,既然是Vue3项目,肯定少不了vue-router、vuex、vue。接口请求工具我们使用axios。css预处理语言我们使用scss。模拟数据我们肯定使用mockjs。代码检测工具eslint这个大家肯定很熟悉了。@vue/compiler-sfc该软件包包含较低级别的实用程序,如果您正在为将Vue单个文件组件(SFC)编译为JavaScript的捆绑器或模块系统编写插件/转换,则可以使用这些实用程序。注意,这里需要与Vue版本一致。剩下的两个依赖@parcel/transformer-vue、@parcel/transformer-sass。则会在启动项目时自动安装,不需要你的手动安装。我最后讲一下@parcel/transformer-image这个依赖,一句话,当时被它坑惨了。

    我下面总结了一下,你需要仔细看下面的内容,要不然跟我一样。熬夜熬到两点钟,也解决不了问题。

    当我安装完上面依赖时,那时还没安装@parcel/transformer-image依赖(因为没仔细看文档)。我非常高兴地启动项目,结果发现img标签引入图片显示不出来。我就疑问了,我又采用了require()也不好使。最重要的是一顿报错。于是,又回头看了下文档。我看到这里https://v2.parceljs.org/recipes/image/,我心里觉得原来没有安装它啊,于是我手动的安装了@parcel/transformer-image。但是,一直在安装sharp这地方卡着。我又看了下文档。

    好吧,我终止了下载,我就不信了。单独安装下sharp还不行吗?果然,出错出在这。我通过查看sharp的官方文档,总结了一下解决措施。

    获取文件

    打开网址:

    1. https://github.com/lovell/sharp-libvips/ 

    查找与您的计算机环境匹配的两个文件。它们是以下两个文件,xxx代表计算机环境。

    1. libvips-8.9.0-xxx.tar.gz 
    2. libvips-8.10.5-xxx.tar.br 

    在Mac OS环境中为darwin-x64。在Windows环境中为win32-x64。

    查找文件夹

    键入以下命令以获取NPM缓存路径。

    1. npm config get cache 

    获取路径后,在该路径下找到_libvips该文件夹,将上述两个文件放入该文件夹中并重新启动安装命令。

    这样,你直接安装@parcel/transformer-image即可,因为安装它的时候自动安装上了sharp。

    安装依赖的问题现在已经解决完了,下面,我们简单地讲一下Parcel 2配置。我摘要出package.json文件中Parcel 2配置如下。

    1.  "source""src/main.js"
    2.   "targets": { 
    3.     "index": { 
    4.       "includeNodeModules": { 
    5.         "axios"true
    6.         "vue"true
    7.         "vue-router"true
    8.         "vuex"true
    9.         "mockjs"false 
    10.       }, 
    11.       "context""browser"
    12.       "distDir""./buildDir"
    13.       "outputFormat""esmodule"
    14.       "scopeHoist"false
    15.       "optimize"true
    16.       "publicUrl""/" 
    17.     } 
    18.   }, 
    19.   "scripts": { 
    20.     "serve""parcel ./public/index.html --port 3000 --no-source-maps"
    21.     "build""parcel build ./public/index.html --no-source-maps" 
    22.   }, 
    23.   } 

    你可以参照如下两个网站进行查阅。

    1. https://v2.parceljs.org/configuration/package-json/ 
    2. https://v2.parceljs.org/features/cli/ 

    这里就简单地介绍下。

    --port 3000就是设置端口号为3000的服务器网址。--no-source-maps不启用source-maps。

    终于,解释完配置项了。下面到了关键时期,就是我们启用下项目好使不。

    键入命令:

    1. yarn serve 

    OR

    1. npm run serve 

    打开网址http://localhost:3000/#/。

    启动Vue3项目成功!!!

    下面我们试试热更新有多快!

    哇塞!150ms!的确很快。

    验证完开发环境,我们试下生产环境。

    1. yarn build 

    OR

    1. npm run build 

    打包速度也非常快!

    那么我们放到线上,看看好使不!

    1. https://www.maomin.club/site/test1/#/ 

    丝毫不差!

    源码地址:

    1. https://github.com/maomincoding/parcel-vue-app 

    但是,到这里我们虽然成功运行起来项目了。但是离搭建Vue3项目构建工具还差一点。

    四、搭建一款的Vue3项目构建工具

    这里,我们将使用commander这个命令行工具作为主导开发一套命令行脚手架工具。除了它,我还有用到chalk,它的作用主要是美化命令行输出样式。inquirer它的作用是进行命令行交互的。

    我这里就不过多介绍了,大家可以去它们的官方网站了解详情。

    我们目的就是通过命令行来安装我们搭建的项目模板,所以肯定是需要推送到NPM上。关于怎样将插件推送到NPM上,我的其他文章也有讲述,可以浏览了解下。

    我们命名脚手架为parcel-vue-cli———Parcel-vue-app项目构建工具。

    你可以这样使用它:

    安装

    1. npm install parcel-vue-cli -g 

    初始化

    1. parcel-vue-cli init  

    查看版本

    1. parcel-vue-cli -v 

    赶快行动起来,构建Parcel-vue-app项目吧!

    源码地址:

    1. https://github.com/maomincoding/parcel-vue-cli 

    结语

    谢谢阅读,希望没有浪费您的时间。Parcel 2还有很多可以玩的地方,比如说你也可以自己搭建一个parcel-react-cli,然后全局命令使用它。是不是有种成就感呢!

     

    来源:前端历劫之路内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     813人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     354人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     318人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     435人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     224人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-后端开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯