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