hotpack
是一个 web
打包器,最大的优点就是文件级缓存,非常快速。如果不是首次运行,无论多大的项目,都在 “毫秒“ 级别。
- 每个构建的文件都会单独缓存,可随时重用。
- 支持单页,多页,服务端渲染(同构)
- 开发环境不破坏目录结构
node >=14
建议全局安装
npm install -g hotpack
所有 命令必须在项目根目录,一般是 src 目录所在的目录。
#Start the development build,The default command of hotpack is dev, it can also be written as hotpack
hotpack dev
#use 3001 port
hotpack dev -p 3001
#no server
hotpack dev -s
#start publishing build
hotpack pro
#start server
hotpack pro -s
#clear dev cache
hotpack dev -c
#clear pro cache
hotpack pro -c
more cmd see help
hotpack dev -h
hotpack pro -h
配置文件放在根目录下的 .hotpack文件夹里。有三个文件。
- base.js 公共配置
- dev.js 开发配置
- pro.js 发布配置
dev.js,pro.js会覆盖 base.js的相同配置
hotpack
项目要求用 ES6 module 语法编写。
除了 正常的 import 语法, 工具对 import 语法做了一些扩展。
- 绝对路径用 ’/' 开头,绝对路径是相对于 src 目录的绝对路径
import { time } from '/js/util.js'
- 引用图片
import loading from './image/loading.png'
- 引用样式
import './index.css'
- 模板物理路径 => web path
import ‘./index.html=>site/index.html’
- 同级的资源可以省略
./
import ‘index.css’
body{background:url(bg.png)}
- 路径补全 本例中,首先会补全 ./time.js 如果文件不存在,补全 ./time/index.js
import time from './time'
- 引入node模块 直接写模块名即可
import Swiper from 'swiper'
- 引入node模块中的样式
import 'swiper/swiper-bundle.css'
css中的图片,字体会被自动处理。
注意:根目录 packae.json dependences 中的 node模块会被 node plugin 处理。如果只是服务端用的模块请放在 devDependences 中。
node plugin
会尝试查找浏览器可以使用的文件,如果找不到,需要手动加配置。
详情请参见 配置详情
编写满足所有需求的插件,可能会非常复杂和庞大。开发需要的功能即可,并放在自己的私有命名空间下面
- @duhongwei/hotpack-babel
- @duhongwei/hotpack-eslint
- @duhongwei/hotpack-compress
- @duhongwei/hotpack-postcss
- @duhongwei/hotpack-vue3
- @duhongwei/hotpack-proxy
如果你需要的功能没有现成的插件,可以自己开发一个。
详情请看 插件
最快的办法是直接clone 模板项目,这样不需要任何配置,可以直接开始。目前仅有一个模板可选,就是通用 vue3
模板
git clone https://github.com/duhongwei/hotpack-tpl-vue3.git my-mpp
cd my-app
npm install
npm start
hotpack 缓存非常强大,但是偶尔可能会带来问题。只要清除缓存,一般就没有问题了。
<template>
<div class="_scope">
<div class="logo"></div>
</div>
</template>
<script>
export default {
}
</script>
<style>
._scope {
height: 50px;
background: #000;
}
.logo {
width:200px;
height:200px;
}
</style>
hoptack 编译后 _scope 会变替换成全局唯一的类名,模块内的类名也会被加上 类型限定
<template>
<div class="_22">
<div class="logo"></div>
</div>
</template>
<script>
export default {
}
</script>
<style>
._22 {
height: 50px;
background: #000;
}
.22 .logo {
width:200px;
height:200px;
}
</style>