# @haizhi.dev/atom-cli

> 打包发布react组件system模块

Latest version **0.1.3** (published 2022-01-14) · ISC license · 0 weekly downloads

## Install

```sh
npm install @haizhi.dev/atom-cli
pnpm add @haizhi.dev/atom-cli
yarn add @haizhi.dev/atom-cli
bun add @haizhi.dev/atom-cli
```

Provides the command `haizhi`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.3 |
| Published | 2022-01-14 |
| First published | 2022-01-14 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=4.0.0 |
| Dependencies | 51 |
| Unpacked size | 36.9 KB |
| Known vulnerabilities | 0 (+35 in 6 direct dependencies) |
| Install scripts | no |
| Maintainers | janasluo |

## Links

- npm: https://www.npmjs.com/package/@haizhi.dev/atom-cli
- Repository: https://github.com/JanasLuo/haizhi-atom-cli
- Homepage: https://github.com/JanasLuo/haizhi-atom-cli#readme
- Issues: https://github.com/JanasLuo/haizhi-atom-cli/issues
- npm.io page: https://npm.io/package/@haizhi.dev/atom-cli

## Dependencies (51)

- [ora](https://npm.io/package/ora.md) ^5.3.0
- [tmp](https://npm.io/package/tmp.md) 0.2.1
- [less](https://npm.io/package/less.md) ^4.1.1
- [sass](https://npm.io/package/sass.md) ^1.32.8
- [axios](https://npm.io/package/axios.md) ^0.21.1
- [chalk](https://npm.io/package/chalk.md) 4.1.0
- [eslint](https://npm.io/package/eslint.md) ^7.26.0
- [figlet](https://npm.io/package/figlet.md) ^1.5.0
- [semver](https://npm.io/package/semver.md) 7.3.2
- [envinfo](https://npm.io/package/envinfo.md) 7.7.3
- [prompts](https://npm.io/package/prompts.md) 2.4.0
- [webpack](https://npm.io/package/webpack.md) 5.4.0
- [fs-extra](https://npm.io/package/fs-extra.md) 9.0.1
- [inquirer](https://npm.io/package/inquirer.md) ^8.1.2
- [commander](https://npm.io/package/commander.md) 4.1.1
- [form-data](https://npm.io/package/form-data.md) ^4.0.0
- [css-loader](https://npm.io/package/css-loader.md) ^5.0.2
- [node-fetch](https://npm.io/package/node-fetch.md) ^2.6.1
- [typescript](https://npm.io/package/typescript.md) ^4.2.4
- [url-loader](https://npm.io/package/url-loader.md) ^4.1.1
- [webpackbar](https://npm.io/package/webpackbar.md) ^5.0.0-3
- [@babel/core](https://npm.io/package/@babel/core.md) ^7.12.13
- [compressing](https://npm.io/package/compressing.md) ^1.5.1
- [cross-spawn](https://npm.io/package/cross-spawn.md) 7.0.3
- [less-loader](https://npm.io/package/less-loader.md) ^8.0.0
- [sass-loader](https://npm.io/package/sass-loader.md) ^11.0.1
- [babel-loader](https://npm.io/package/babel-loader.md) ^8.2.2
- [style-loader](https://npm.io/package/style-loader.md) ^2.0.0
- [webpack-merge](https://npm.io/package/webpack-merge.md) ^5.7.3
- [@babel/runtime](https://npm.io/package/@babel/runtime.md) ^7.12.13
- [dotenv-webpack](https://npm.io/package/dotenv-webpack.md) ^6.0.0
- [postcss-loader](https://npm.io/package/postcss-loader.md) ^5.0.0
- [react-dev-utils](https://npm.io/package/react-dev-utils.md) ^11.0.2
- [download-tarball](https://npm.io/package/download-tarball.md) ^2.0.0
- [@babel/preset-env](https://npm.io/package/@babel/preset-env.md) ^7.12.13
- [webpack-dev-server](https://npm.io/package/webpack-dev-server.md) ^3.11.2
- [@babel/preset-react](https://npm.io/package/@babel/preset-react.md) ^7.12.13
- [copy-webpack-plugin](https://npm.io/package/copy-webpack-plugin.md) ^7.0.0
- [html-webpack-plugin](https://npm.io/package/html-webpack-plugin.md) 4.4.0
- [clean-webpack-plugin](https://npm.io/package/clean-webpack-plugin.md) ^3.0.0
- [eslint-webpack-plugin](https://npm.io/package/eslint-webpack-plugin.md) ^2.5.4
- [terser-webpack-plugin](https://npm.io/package/terser-webpack-plugin.md) ^5.1.1
- [mini-css-extract-plugin](https://npm.io/package/mini-css-extract-plugin.md) ^1.3.8
- [webpack-bundle-analyzer](https://npm.io/package/webpack-bundle-analyzer.md) ^4.4.0
- [@babel/preset-typescript](https://npm.io/package/@babel/preset-typescript.md) ^7.12.17
- [@typescript-eslint/parser](https://npm.io/package/@typescript-eslint/parser.md) ^4.23.0
- [validate-npm-package-name](https://npm.io/package/validate-npm-package-name.md) 3.0.0
- [css-minimizer-webpack-plugin](https://npm.io/package/css-minimizer-webpack-plugin.md) ^1.2.0
- [@babel/plugin-transform-runtime](https://npm.io/package/@babel/plugin-transform-runtime.md) ^7.12.15
- [@babel/plugin-proposal-decorators](https://npm.io/package/@babel/plugin-proposal-decorators.md) ^7.12.13
- [@babel/plugin-proposal-class-properties](https://npm.io/package/@babel/plugin-proposal-class-properties.md) ^7.12.13

## Recent versions

- 0.1.3 (latest) — 2022-01-14
- 0.1.1 — 2022-01-14
- 0.1.0 — 2022-01-14

## README

---
title: React 自定义组件开发
---
##  React 自定义组件开发

 - #### atom-cli 自定义脚手架
    - #### 开发目的
      将传统React应用（atom）开发方式通过ClI的方式二次封装，目的主要是为了方便开发和实施人员在做自定义组件开发的时候固定流程的便捷
    - #### 实现原理
      通过[NodeJs](http://nodejs.cn/)的[commander](https://github.com/tj/commander.js)工具，提取出组件应用webpack的 开发环境（development）和 生产环境（production） 的配置，发布到私有仓库后，组件应用就可以通过 
      ```js
      yarn add @haizhi.dev/atom-cli
      ```
      直接安装脚手架工具，配置组件应用scripts：
      ```js
        "scripts": {
            "start": "haizhi start",
            "build": "haizhi build",
        },
      ```
      开发的时候就可以直接使用了，webpack拓展可以使用[webpack-merge]()实现拓展
    - #### 使用方式
        - 全局安装 @delivery/atom-cli 
        ```js
        yarn add @haizhi.dev/atom-cli
        ```
        - 命令 create
            ```js
            haizhi create 
            ```
            相当于拉取atom仓库，到项目 然后需要进到目录里面执行yarn 下载依赖，最后使用 yarn start 或者 haizhi start 都可以开启组件应用服务
        - 命令 start 
            ```js
            haizhi start
            ```
            脚手架自动集成了原本react应用的webpack配置，并且根据数派项目的自定义组件方案，调整了开发环境的打包模式，通过systemJs的方式打包，并且自动将公共依赖提取出来
            ![webpackSystem](./static/webpackSystem.jpg)
        - 命令 build 
            ```js
            haizhi build
            ```
            用于编译组件，将compnents中的组件全部打包出来，放进template目录下，默认一个组件对应一个js，组件名就是文件名。
          - 参数：
            -   .option("-a, --analyze", "生成分析报告 默认为 false")
            -   .option("-c, --config <configFile>", "指定config配置文件")
            -   .option("-ps, --progress", "显示进度 默认为 true")
        - 命令 publish
            ```js
            haizhi publish -c ./dist/template/Button.js
            ```
            用于发布组件，用于将已经编译的组件上传发布到服务器，这样在数派后台应用组件管理菜单可以直接看到组件，默认组件名和模块名是文件名如上就是 Button
            - 参数:
                - .option("-c, --componentPath <componentPath>","需要上传文件的路径，必须填写，每次上传一个组件")
                - .option("-n, --componentName <componentName>", "组件名称，没有默认取文件名")
                - .option("-m, --moduleName <moduleName>", "模块名称，没有默认取文件名")


 - #### atom 组件应用
    - #### 开发目的
      统一管理自定义React组件，结合cli的打包方案，可以快速生成应用，并且上传到数派应用组件管理功能内
    - #### 公共依赖
        [antd](https://3x.ant.design/index-cn)
        [react]()
        [react-dom]()
    - #### 例子
        ![atome](./static/atome.jpg)
        使用react+typescrip的方式开发，正常使用引入antd组件，在组件打包之后，会把对应的依赖分离出来，如果安装了其他的依赖，会根据system模块化打包方案，将第三方依赖打包进去
    - #### 打包后的文件
        ![build](./static/build.jpg)
    - #### 上传至组件仓库
        之后根据脚手架工具上传组件即可，当然也可以直接通过数派后台客户端，手动上传js文件，这里只需要选择react组件就可以上传
        ![spbuild](./static/spbuild.jpg)

---
_Source: https://npm.io/package/@haizhi.dev/atom-cli · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
