8-divine
Version:

164 lines (129 loc) • 5.03 kB
Markdown
# (一) 构建过程
## (1) 安装依赖
```
npm init -y
npm install vue -D
npm install webpack -D
npm install webpack-cli -D
npm install webpack-dev-server -D
npm install vue-loader vue-template-compiler html-webpack-plugin -D // vue组件处理 和 html模版处理
npm install url-loader file-loader html-loader -D //文件处理
npm install style-loader css-loader -D // 样式处理
npm install sass sass-loader node-sass -D // sass相关
npm install babel-loader @babel/core @babel/preset-env -D // babel可以把es6转成es5
npm install @babel/plugin-proposal-decorators // ----------- class 的装饰器语法,注意两者的顺序 -------- 在前
npm install @babel/plugin-proposal-class-properties -D // -- 支持解析 class 语法,proposal是提案的意思 - 在后
npm install cross-env -D
####### markdown 相关
npm install markdown-it -D // 解析器
npm install markdown-it-anchor -D // 生成锚点
npm install markdown-it-container -D // 创建块级自定义容器的解析插件
npm install markdown-it-chain -D // 支持链式调用 markdown-it
npm i -D transliteration // 汉字转拼音
```
### (2) 目录结构
```
.
├── build // webpack配置文件夹
├── dist // 打包后的文件夹
├── dist-prod // 入口文件夹
│ ├── 8divine.js
│ └── index.html
├── docs
│ └── README.md // 说明文档
├── examples // vue项目测试,即起一个vue本地服务测试各个组件
│ ├── app.vue
│ ├── index.js
│ ├── logo.jpg
│ ├── main.js
│ └── utils
├── index.js // 组件库 - vue插件 - ui组件库的入口
├── package.json
├── packages // 各个组件
├── public // 静态文件夹
│ └── index.html // vue模版
└── test
```
### (3) 打包 和 测试
```
1. 打包
- 执行命令 cnpm run build:prod 进行webpack打包
- "build:prod": "cross-env NODE_ENV=development webpack --config build/webpack.config.prod.js"
- 入口:index.js
- 作用:主要做的事情就是引入 8-divine 组件库中的所有组件,并声明install方法,即作为Vue的插件,完成组件注册
- 使用:在 package.json 中 main 配置项指定了项目入口是 dist-prod/8divine.js,其实就是 index.js 为入口的所有依赖代码
- 出口:dist-prod
2. 测试
- 执行命令 cnpm run dev
- cnpm run dev ---------- 加载的是 webpack.config.dev.js ---> 指定的入口是 examples/main.js
- cnpm run build:prod --- 加载的是 webpack.config.prod.js --> 指定的入口是:index.js
```
### (4) npm 发布包相关
```
1
package.json
main
- 指定了项目的入口文件,该文件就是项目打包后的文件
- 即使用组件库时 import xxx from 'xxxx' 使用的文件
keywords
- 关键字数组,可以通过关键字来搜索npm包
homepage
- 项目的官网链接url地址
version
- 版本号
- npm publish 必须是修改过后的最新的版本号
```
```
2
webpack.config.js
- output.library
- name:导出库的名称
- type:暴露库的方式,比如 umd ( umd 同时支持 esmodule + commanjs + amd )
- umdNameDifine: true 将amd转成umd
output: {
filename: "8divine.js",
path: path.resolve(process.cwd(), "dist-prod"),
library: {
name: "8divine", // 配置导出库的名称,如使用require引入,这里就是require("8divine")
type: "umd", // 配置将库暴露的方式,即配置以何种方式导出库,注意 该属性用来代替下面的 libraryTarget,以后webpack可能移除对 libraryTarget 的支持
umdNamedDefine: true, // 当使用 output.library.type: "umd" 时,将 output.library.umdNamedDefine 设置为 true 将会把 AMD 模块命名为 UMD 构建。否则使用匿名 define
}
},
```
```
3
npm 命令
npm pack
- 生成一个压缩文件 ( name-version.tgz )
- 注意:npm pack 命令是在整个项目的根目录中输入的命令,因为package.json在根目录
- 使用压缩文件:npm install 路径\xx-xx.tgz
发布流程
1. 第一次发包
- npm adduser --- 注意 npm 必须是npm的源,不能是淘宝等,可以使用nrm切换
- 然后输入 用户名 密码
2. 非第一次发包
npm login
- 会让输入 用户名,密码,邮件
- 以及邮件收到的 OTP code 验证码
3. 发布
npm publish
4. 撤销发布的包
npm unpublish
npm unpublish 包名@版本号
5.1 更新至新的补丁版本
npm version patch
5.2 更新版本号并进行git提交,自定义提交描述
npm version major -m "版本更新至%s"
5.3 更新至新的补丁版本,并不增加git的tag
npm version patch --no-git-tag-version
```
# 资料
- npm 打包发布流程 https://juejin.cn/post/6994746118135349262
- npm 发布相关 https://blog.51cto.com/u_15328720/3401308
- process.cwd() 和 `__direname` 的区别 https://www.jianshu.com/p/a80c59abd1fb
- 环境变量区别 https://juejin.cn/post/6844904023791796237#heading-0
- 构建过程 https://juejin.cn/post/6950905030635421710