惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
The Hacker News
The Hacker News
T
Threatpost
C
CERT Recently Published Vulnerability Notes
Help Net Security
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Last Watchdog
The Last Watchdog
AI
AI
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Cyberwarzone
Cyberwarzone
T
Threat Research - Cisco Blogs
G
GRAHAM CLULEY
L
LINUX DO - 热门话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Spread Privacy
Spread Privacy
Scott Helme
Scott Helme
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
Know Your Adversary
Know Your Adversary
WordPress大学
WordPress大学
AWS News Blog
AWS News Blog
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News: Ask HN
Hacker News: Ask HN
小众软件
小众软件
Cisco Talos Blog
Cisco Talos Blog
有赞技术团队
有赞技术团队
H
Heimdal Security Blog
U
Unit 42
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
Security Latest
Security Latest
腾讯CDC
Security Archives - TechRepublic
Security Archives - TechRepublic
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
A
Arctic Wolf
L
LINUX DO - 最新话题
Engineering at Meta
Engineering at Meta
C
Cisco Blogs
Recent Announcements
Recent Announcements

云游君的小站

开源项目的「死与新生」 没有红包封面,但是 AI 春联…… 家·烟花·红包封面 云乐坊工作室的成立与缘起与有关的话 聊聊四元数与万向锁及其实际意义 从零开始写一个 Web Component - GitHub Corners 旋转吧!徽章! 又拍云—年轻人的第一个 CDN 云空调,便携小空调 char-dust 一个图片转字符画的 npm 包与示例站点 nnrm - 一个极简的 npm/yarn registry 切换管理器 做猪呢,最重要的是开心 从 Vite 与 Vue 开始的 D3 数据可视化之旅 如何找到你朋友的社交账号 写写高斯模糊——从 CSS 模糊滤镜的白边说起 如何从 Valine 迁移至 Disqus ADV 游戏引擎计划 关于我打算当老师并报考教师资格证这件事 Strato - Hexo 主题「Yun」版本宣传 PV 我与小镇与家 el-bot & mirai-ts 制作笔记 第三方评论系统之我见 人生不是一场马拉松 👴就是二次元,故尝试证明。 教你如何从零开始搭建一个属于自己的网站 使用 CDN 加速你的 GitHub Pages 网站 使用 CCDIK 或 FABRIK 实现逆向动力学 【转】三维文件格式知多少 【译】30 分钟学会 LaTeX LaTeX 使用笔记 在 macOS 下配置 OpenGL 路漫漫其修远兮 CSS 陷阱 Blender 学习笔记 Everyday Auto Xuexiqiangguo 酷 Q 使用笔记 Deepin 使用笔记 塞翁失马焉知非福 hexo-theme-yun 制作笔记 写给可爱的学弟学妹们 北线无战事 让百度收录你的 GitHub Pages 博客 搭建自己的 Minecraft 服务器 导出「你的日记」与导入「一本日记」 从来如此 卷土重来未可知 恋爱证明记 微信与象棋 关于部落冲突的二三事儿(番外)-端午事变 Travis-CI 持续集成部署 Vue 中 canvas 的自适应 大家一起吃火锅吧 Vue 学习笔记 【动画电影】《声之形》观后感 VS Code 配置笔记 仓生 YunYouJun/give-me-money 永远相信美好的事情即将发生 鱼与熊掌 人生本该如此。 Discourse 新一代开源论坛 Hexo 静态博客搭建笔记 Coding WebIDE 云端开发实验室 npm & yarn 常用包与命令 像夏花一样绚烂 【番剧】《月色真美》(老夫的少女心啊) 临摹一只智障女神∠( ᐛ 」∠)_ 南京之旅-记10th计算机设计大赛 Git 学习笔记 Laravel 使用笔记 Wordpress 的实用插件与主题推荐 【定格动画】交换/EXchange 我与幻星的故事 来自某夏令营的回忆 水彩原创头像尝试 云游君表情包制作计划 小说连载初尝试-《阿庫娅的星球》 仓鼠 回声 【分享】网页背景效果插件 Canvas-Nest.js 【花开物语|MAD】幹物女(WeiWei)-Bonboru! 太空 关于部落冲突的二三事儿-2 关于部落冲突的二三事儿-1 关于部落冲突的二三事儿-序
Parcel.js + Vue 搭建笔记
☁️ · 2018-02-20 · via 云游君的小站

2021-06-08 时至今日,该篇文章的内容已有所过时。 Parcel 的地位也似乎一直有些尴尬。 零配置的确是一个亮点,但是到真正编写复杂庞大的项目,我们还真的需要零配置吗? 而谈起配置,似乎又难与悠久历史生态的 Webpack 同台竞技。 至于速度,则难以与新诞生的基于 ES 打包的 Vite 相匹敌。 现今的我基本已经转向使用 Vite,而并未再尝试 Parcel 的使用。

去年(已经是三年前了!)年末便听得新一代打包工具 Parcel.js 的风风火火,今日(两年前的某一天)也终于得以静下心来试一试。

five-year

Parcel

如官网所述,极速零配置 Web 应用打包工具。

Vue

鼎鼎大名,自不多言。


Vue 官方提供的模板 vuejs-template/webpack 是基于 Webpack 打包的。所以尝试着用 parcel.js 来替代 webpack 与 vue 结合在一起。

自己的小 Demo ​

过程 ​

初始化 ​

基本可以参照 vuejs-template/webpack 进行修改。

vue init webpack vue-parcel-demo 使用 vue 脚手架生成 webpack 模板

bash

? Project name vue-parcel-demo
? Project description A Vue.js project
? Author YunYouJun <me@yunyoujun.cn>
? Vue build runtime | Runtime-only
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Set up unit tests No
? Setup e2e tests with Nightwatch? No
? Should we run `npm install` for you after the project has been created? (recommended) yarn
  • 删除 build, config, static, node_modules(之后重装) 文件夹与 .editorconfig, .postcssrc.js, package.json(之后重新生成) 文件。

  • README.md(可以重写)

  • 进入文件夹下,执行 yarn init (配置默认即可)

安装依赖 ​

bash

yarn add parcel-bundler vue vue-router --dev

parcel-plugin-vue

parcel-bundler/parcel @1.7.0 support Vue Now. This plugin will be not recommended.

Parcel 1.7.0 版本似乎已经支持 Vue 了。所以不需要再安装 parcel-plugin-vue 插件了。(默默删去了一段

(果然配置越来越少 2333,再之后这篇文章说不定都没有存在的必要了。)


虽说零配置,实际上是 Parcel 帮我们把要配置的东西做了。

在打包 Vue 的时候,发现它调用 yarn 安装了几个插件。当然我们也可以自己先安装上。

bash

yarn add -D vue-template-compiler @vue/component-compiler-utils vue-hot-reload-api
# -D 与 --dev 一个意思,将依赖安装在 devDependencies

Babel 配置 ​

Babel · The compiler for next generation JavaScript

Parcel 已经默认支持 Babel 转换

index.html ​

html

<html lang="zh-cmn-Hans"></html>

网页头部的声明应该是用 lang="zh" 还是 lang="zh-cn"? - 知乎

emmm, 纠结地搜到了这个答案。简体中文页面原来是用 lang="zh-cmn-Hans"

引入 main.js

html

...
<body>
  <div id="app"></div>
  <script src="./src/main.js"></script>
</body>
...

package.json 添加 scripts 字段 ​

json

{
  "name": "vue-parcel-demo",
  "version": "1.0.0",
  "main": "index.js",
  "repository": "https://github.com/YunYouJun/vue-parcel-demo",
  "author": "YunYouJun <me@yunyoujun.cn>",
  "license": "MIT",
  "scripts": {
    "start": "npm run dev",
    "dev": "parcel index.html -p 2333 --open",
    "build": "parcel build index.html --public-url ./ --no-cache"
  },
  "devDependencies": {
    "@vue/component-compiler-utils": "^3.1.1",
    "autoprefixer": "^9.7.4",
    "parcel-bundler": "^1.12.4",
    "postcss-modules": "^1.5.0",
    "vue": "^2.5.16",
    "vue-hot-reload-api": "^2.3.0",
    "vue-router": "^3.0.1",
    "vue-template-compiler": "^2.5.16"
  },
  "dependencies": {}
}
  • -p 2333 设置端口号为 2333
  • --open 自动打开浏览器
  • --public-url ./ 设置要提供服务的公共 URL(./ 也就是设置为当前 dist 目录下)
  • --no-cache 禁用文件系统缓存

.gitignore ​

使用 git 管理仓库时,切记添加自定义忽略文件

  • .cacheparcel 构建时的缓存
  • dist 是打包后的文件

bash

# Custom
.cache
dist

# ...

node_modules/

# ...

如果使用 VS Code 编辑器,也可以对工作区进行配置,不对 .cache dist 等文件夹进行搜索。

搜索排除

使用 SCSS

Command ​

  • npm run dev 运行
  • npm run build 构建

输入 npm run dev 运行试试。

出现如下报错:

Server running at http://localhost:1234 × C:\Users\YunYou\Documents\GitHub\vue-parcel-demo\src\router\index.js:3:23: Cannot resolve dependency '@/components/HelloWorld'

原因是 @ 是 webpack 默认配置中使用 alias (别名) 指代 src 文件夹的符号。

js

// 位于 build/webpack.base.conf
module.exports = {
  // ...
  resolve: {
    // 路径别名
    alias: {
      '@': resolve('src'),
      'vue#39;: 'vue/dist/vue.esm.js' // 这一个之后解释
    }
  },
  // ...
}

进入 src/router/index.js , 将路径修改为相对路径

diff

- import HelloWorld from '@/components/HelloWorld'
+ import HelloWorld from '../components/HelloWorld'

再次运行 npm run dev, 打开 http://localhost:1234 即可看到 Vue 的主页了。

FAQ ​

运行时 + 编译器 vs. 只包含运行时

在使用 vue 脚手架 vue init webpack vue-parcel-demo 生成 vue-webpack 模板过程中,有如下提示:

bash

? Vue build (Use arrow keys)
> Runtime + Compiler: recommended for most users
  Runtime-only: about 6KB lighter min+gzip, but templates (or any Vue-specific HTML) are ONLY allowed in .vue files - render functions are required elsewhere

如果选择 Runtime + Compiler ,此后会发生如下报错。

[Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.(found in )

因为 vuejs-templates/webpackmain.js 源码如下

vuejs-templates/webpack/template/src/main.js

html

new Vue({
  el: '#app',
  {{#router}}
  router,
  {{/router}}
  {{#if_eq build "runtime"}}
  render: h => h(App)
  {{/if_eq}}
  {{#if_eq build "standalone"}}
  components: { App },
  template: '<App/>'
  {{/if_eq}}
})

如果选择 Runtime + Compiler, main.js

js

// ...
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

如果选择 Runtime-only, main.js 则为

js

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

Vue 模板中 webpack 的默认配置通过 alias 设置了 vue 的别名,引用了完整版的 vue 。

js

// 位于 build/webpack.base.conf
module.exports = {
  // ...
  resolve: {
    // 路径别名
    alias: {
      '@': resolve('src'),
      'vue#39;: 'vue/dist/vue.esm.js' // 即此处
    }
  },
  // ...
}

最终打好的包里实际上是不需要编译器的,所以只用运行时版本即可。

Parcel 使用 runtime-only, 修改 main.js 中内容为 Runtime-only 形式 render: h => h(App) 即可。

后记 ​

= =,意外的访问量很高。

时至今日,许多当初的配置已经不再需要,会逐步去除。