---
# System prepended metadata

title: 創建自己的 library
tags: [Learn]

---

---
tags: Learn
---

# 創建自己的 library

## 關於 package.json 的檔案
可以通過 npm init 來生成 每個專案都會有這個
裡面會有依賴項目(需要安裝哪些東西的專案)
可能有 dependencies or devDependencies 也可能都沒
都沒有就是不需要 npm i 就可執行的專案
>有加 dev 的依賴項 是編譯或開發的依賴
>例如 babel 把新版js翻成舊版js 打包完專案他就無用了

## 編譯
可以想像是化學反應
依賴項就是Ａ程式碼是Ｂ
dev依賴像是幫助產生化學反應的催化劑
最終編譯就是Ｃ

## dependencies
通常是 名稱：版本號
安裝方式在 npm 網站 npm 是 nodejs 的套件庫
一個套件在 npm 的更新與 github 的更新是分開獨立的
假設不發布到 npm 也可以用 github 網址進行套件的安裝

## name
推 npm 時要先改裡面的 name
不要用你 clone 別人的時的名字
這個 name 就是你套件的名稱 可以跟專案資料夾名稱不同

## 版本號
1. 向前向下相容 不需改變ＡＰＩ寫法 => 改版本號第三位數
2. 新功能開發 舊的功能沒受影響 => 改版本號第二位數
3. 更改導致ＡＰＩ寫法不同了 => 改版本號第一位數

## main 
指定入口文件
export default 只能是單數
其他直接 export 就好
也可以不設置 default 

## gitignore
放不需被上傳的東西 比如 node_modules
要刪除 /dist 這行

## gulp-config.js
output 可以設置輸出路徑

## author
作者 寫名字＋信箱

## license 
盡可能選用這三個： "MIT" 、 "BSD" 、 "apache"
不影響到版權的話這幾種都可以任意使用
不過 apache 是給他們基金會用的 跟他們無關基本上不太會用到

另外避免使用這三種： "GNU GPL" 、 "GNU" 、 "GPL"
使用它們就必需要把自己專案強迫開源

## scripts 
是該專案的所有指令
如果跟終端機原生指令衝突 則需加上 run
比如 npm run build 就是因為 npm 本身有 build 的指令

## 發布流程
先修改版本號
然後 build 出 dist 資料夾 並把 gitignor 的 dist 拿掉
（可以看一下 node_modules 內的套件也都是包含 dist 的）
然後要檢查入口文件位置有沒有錯

## 發布後在其他專案中安裝此套件的方式
找到 package.json
在 dependencies 中加入 專案名稱(package.json name)與對應 github 連結(git+連結.git#版本號或分支名稱)
```json=
"dependencies": {
  "rick-1114-lib": "git+https://github.com/xtforgame/az-dev-base.git#v1.0.0"
},
```
>版本號要在 https://github.com/帳號名稱/repo名稱/releases 新增

## 將專案發佈到 npm
進入 npm 官網註冊/登入
然後按照發布流程走完後於終端機輸入 npm login
登入後再輸入 npm publish 即可
>可以到 npm 官網點選右上角的頭像 => Packages
>就可以看到剛剛發佈的套件已經列在裡面了
