# ICE NPM Status [ENGLISH](./README.md) | 简体中文 ## 简介 ### 基本介绍 `ice`是对于webpack进行的一个二次封装,用于帮助开发者快速运行react项目。ice会暴露出`ice.config.js`文件,在里面可以暴露一个函数或者对象,对于预设的webpack配置进行覆盖。 `注意点`: 这个库很多地方都并不是特别完善,所以千万不要用于生产环境或者实际项目中。当然,如果您在使用的过程中存在一些BUG,也欢迎给我提issue或者建议,帮助我一点一点完善。 ### 为什么我要写这个? 我在平常写demo的时候可能用不到create-react-app中的很多功能,所以需要配置自己的项目。很多时候就需要从创建`webpack.config.js`开始,这是一个不断重复的过程。所以,对于我来说,就想把webpack的一些配置封装起来,用于构建项目。另一方面就是加强自己对于webpack配置的一个理解吧。 ## 如何启动项目 1. 你可以在全局或者项目目录中安装`ice` ```shell yarn global add @ice-age/ice or yarn add @ice-age/ice -D ``` 2. 确保你的项目结构与下面目录结构一致 ```shell $ tree . . ├── ice.config.js ├── package.json ├── public │ └── index.html ├── src │ └── index.tsx └── yarn.lock ``` ,当然不一致的话,也可以重写`ice.config.js`文件去适配项目。(在当前版本下`ice.config.js`是必须的,不然会报错,这个BUG后面再做优化)。 3. 当你的目录结构ok以后,就可以尝试运行`yarn ice dev`或者`ice dev`,来启动项目。 4. 下面是一些文件示例: ```html <%= htmlWebpackPlugin.options.title %>
``` ```javascript // ice.config.js /* eslint-disable @typescript-eslint/no-var-requires */ /*eslint-env node*/ const path = require('path') const { merge } = require('webpack-merge') module.exports = (config) => { console.log(config) const _config = { entry: path.resolve(__dirname, './src/app.tsx'), output: { path: path.resolve(__dirname, 'dist'), filename: 'bundle.[chunkhash:8].js', }, } return merge(config, _config) } ``` ## SCRIPTS 下面是一些可运行的脚本 ### ice init 初始化项目,下载模板工程,模板工程已经集成ice。详细可查看模板库:[https://github.com/zhangzhengsmiling/react-template](https://github.com/zhangzhengsmiling/react-template) ### ice dev 启动webpack dev server。类似于`webpack serve`, 内部用的是babel-loader编译ts代码,因此可能不会进行类型检查报错,你可以尝试通过`tsc --watch`进行类型检查。 ### ice build 项目构建脚本 ### ice lint [options] 与eslint类似,对于一些eslint的配置进行封装 你可以尝试运行`ice lint src --ext .tsx,.ts`进行lint校验 ### ice ci [options] `ci`命令可以帮助我们快速构建工程化项目,husky,commitizen等工程化环境可以通过脚本快速构建,一键安装依赖,并配置相关文件 #### 目前支持的工程化配置如下: - --husky - --commitizen - --commitlint - --standard-version - --test #### 1. ice ci --husky - 判断package.json中的dependencies和devDependencies中是否已有husky,如果有,跳过后续流程并给出tips提示 - 如果没有安装过,则会去安装`husky@4.3.6`,然后在package.json中配置husky hook。请确保package.json中没有husky字段,不然一样会跳过写入hook的流程(这块暂时还没有做优化) *注意*:为什么安装husky的版本是4.3.6的,因为husky版本5.0以上好像hooks配置是在.husky文件夹中配置的,导致在package.json中配置的hook无效,暂时脚本还没有升级支持5.0以上。如果要用5.0以上的husky版本,具体配置方式可以去官方文档找下。 #### 2. ice ci --commizien - 首先会去pacakge.json查找config字段,如果存在,会认为已经配置了commitizen,就会跳过后面的流程 - 如果没有,就会开始安装`commitizen`、`cz-conventional-changelog`依赖,并在package.json中写入config字段 #### 3. ice ci --commitlint - 安装`@commitlint/config-conventional`、`@commitlint/cli` - 在工作目录中创建.commitlintrc.js文件 #### 4. ice ci --standard-version - 安装`standard-version`依赖 - 在package.json的scripts字段里加入release脚本,如果release脚本占用了,可以手动添加脚本 #### 5. ice ci --test - 安装依赖,`@babel/core`, `@babel/preset-env`, `@babel/preset-typescript`, `babel-jest`, `jest-environment-jsdom`, `jest` - 创建jest配置文件,`jest.config.js` - 创建babel配置文件,`.babelrc.js` - 在package.json中添加test脚本 #### 注意: 以上涉及修改package.json的脚本(commizen/husky/standard-version),设计到json序列化成对象,可能会导致packages.json里面字段排序按照字典序重排。