# thinbuilder

基于 Express 的 [THINJS](http://thinjs.com/) 构建中间件，用来动态打包 THINJS 编写的脚本文件。

[![npm version](https://badge.fury.io/js/thinbuilder.svg)](https://badge.fury.io/js/thinbuilder)

## 如何安装

```console
npm install thinbuilder
```

## 如何使用

#### Express 引用示例

打开 app.js 文件，按照如下方式添加代码引用：

```javascript
......
const thinbuilder = require("thinbuilder");
......
app.use(express.static(path.join(__dirname, "public")));
app.use(thinbuilder());
......
```

#### 自定义配置

我们提供了两种方式调整 `thinbuilder` 编译属性：参数配置和文件配置，其中**文件配置**优先级最高。

1. **参数配置**

   app.js 中添加如下配置参数：

   ```javascript
   app.use(thinbuilder({alias:"thinbuilder",debug:true [,...params]}));
   ```

2. **文件配置（推荐）**

   项目根目录下创建 `thin.config.json`文件，配置示例如下：

   ```json
   {
   	"alias": "thinbuilder",
   	"priority": [{ "path": "test", "files": ["y.js", "subfolder/s.js"] }],
   	"mode": "folder",
   	"debug": true,
   	"minify": true,
   	"cachetime": 600
   }
   ```

3. **配置参数说明**

   - `alias`：定义 thinjs 根目录名称，用来存放 thinjs 脚本文件，默认值为 thinbuilder。

     注意：文件夹必须放置在项目根目录，早期含有 jsbuilder 文件夹的项目可以省略该参数。

     ```json
     {
     	"alias": "thinbuilder"
     }
     ```

   - `minify`：启用脚本混淆/压缩开关，未配置时将会根据环境变量设定初始值（production 为 true，其他为 false）。

     ```json
     {
     	"minify": true
     }
     ```

   - `terserOpts`：混淆/压缩选项配置，仅当 `minify` 为 true 时有效，默认配置为：

     ```json
     {
     	"format": { "comments": false },
     	"compress": {
     		"drop_console": ["log", "info"],
     		"drop_debugger": true,
     		"sequences": false
     	},
     	"mangle": true
     }
     ```

   - `cachetime`：设置客户端缓存时间（秒），默认不缓存。

     ```json
     {
     	"cachetime": 600
     }
     ```

   - `debug`：调试日志开关，开启后控制台打印编译过程日志信息，未配置时将会根据环境变量设定初始值（production 为 false，其他为 true）。

     ```json
     {
     	"debug": true
     }
     ```

   - `mode`：扫描模式，用来告诉编译器优先解析打包对象（folder|file），默认为 folder。

     ```json
     {
     	"mode": "folder"
     }
     ```

   - `priority`：设置 thinjs 文件构建顺序（数组格式），默认构建顺序为文件名排序，该属性可以灵活调整 thinjs 文件构建顺序。

     1. `path`属性设置需要调整的文件夹路径
     2. `files`属性设置需要优先构建的文件路径，支持子目录文件。

     注意：不建议“/”开头、字母大小写敏感。

     ```json
     {
     	"priority": [
     		{
     			"path": "test",
     			"files": ["file2.js", "subfolder/file1.js"]
     		}
     	]
     }
     ```

## 其他说明

1. 我们推荐在项目根目录下使用 thinbuilder 作为 thinjs 根文件夹，当然早期的 jsbuilder 文件夹一样兼容。
2. Node Version >= 15.0.0。
3. 支持压缩/混淆功能。
