精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手摸手學會搭建一個 TS+Rollup 的初始開發環境

開發
目前市面上有許多 CLI 工具用于快速初始化構建一個項目。例如:tsdx、create-react-app,對于一些個人小項目來說實在是顯得又有些臃腫,如果拋開這些 CLI 工具,自己手動從 0 到 1 手動搭建一個小而美的 NPM 包開發環境需要做哪些工作?不妨一起動手試一下!

[[434662]]

目前市面上有許多 CLI 工具用于快速初始化構建一個項目。例如:tsdx、create-react-app,對于一些個人小項目來說實在是顯得又有些臃腫,如果拋開這些 CLI 工具,自己手動從 0 到 1 手動搭建一個小而美的 NPM 包開發環境需要做哪些工作?不妨一起動手試一下!

首先是我們的項目預期:

  1. 實現一個 Javascript 工具函數庫
  2. 支持 Typescript
  3. 團隊協作 commit message 格式約束
  4. Prettier 代碼格式化,ESlint 校驗
  5. 發包前自動升級版本并構建

打包構建工具采用 Rollup[1]。

一、構建基本文件結構

首先就是需要設計并搭建項目的文件結構,并初始化一個 package.json 文件,用于描述當前項目的功能。

  1. mkdir dyboy-npm-ts-template 
  2.  
  3. cd dyboy-npm-ts-template 
  4.  
  5. touch index.ts 
  6.  
  7. npm init -y 

二、初始化 Typescript 環境

可以看到我們的入口文件 ./index.ts 是 Typescript 類型,最重要的是我們需要打包給用戶,以支持在 TS 環境下的代碼提示,有助于提升研發效率

  1. yarn add typescript -D 

然后初始化快速生成一個 tsconfig.json 文件,該文件屬于 Typescript 的配置文件

  1. tsc --init 

默認的 tsconfig.json 配置需要修改,以支持我們能夠編譯成 ES 模塊。

簡單修改后,符合需求的 tsconfig.json 配置以及目錄結構如下:

這樣配置好后,Typescript 在編譯過程中會向 ./dist 目錄輸出 index.d.ts 的類型聲明文件

同時需要將 package.json 文件中修改/新增;

  1. "main""index.js"
  2. "main""./dist/index.cjs.js"
  3. "module""./dist/index.esm.js"
  4. "types""./dist/index.d.ts"
  5. "files": [ 
  6. +   "dist" 
  7. + ], 

files 字段是用于約定在發包的時候NPM 會發布包含的文件和文件夾。

注意: files 字段中文件夾名直接寫名字,不要包含 ./ 字符,否則打包出來的產物不會包含該文件夾。

到這一步,就可以流暢編寫 Typescript 文件

index.ts 文件內容:

  1. const func = () => { 
  2.     // TODO: coding... 
  3. }; 
  4.  
  5. export { func }; 

鼠標放函數 func 上面也有了類型提示,表示 Typescript 開發環境已經 OK

三、Git 初始化

代碼存在本地,但為了更好的代碼版本管理/備份,將使用 Git 工具并和遠程倉庫關聯起來。

首先初始化項目的 git

  1. git init 

新建一個 .gitignore 文件,用于忽略那些不需要存入 Git 版本的文件或文件夾,并補充寫入規則如下:

  1. node_modules/ 
  2. dist/ 
  3. .DS_Store 
  4. .yarn-error.log 

四、初始化 Rollup 打包環境

因為我們發布 NPM 包,所以需要一個小巧精致的構建工具,自然是選擇 Rollup 來作為打包工具,Rollup 較好地支持 tree shaking,使得打包出來的包體積更小。

4.1 安裝依賴:

  1. yarn add rollup -D 
  2. yarn add @rollup/plugin-typescript -D 
  3. yarn add @rollup/plugin-node-resolve -D 
  4. yarn add @rollup/plugin-commonjs -D 

安裝了 rollup,以及支持 TS、處理路徑和 commonjs 的插件

4.2 配置 rollup.config.js

初始化的配置如下

  1. import resolve from '@rollup/plugin-node-resolve'
  2. import typescript from '@rollup/plugin-typescript'
  3. import commonjs from '@rollup/plugin-commonjs'
  4.  
  5. export default [ 
  6.   { 
  7.     input: './src/index.ts'
  8.     output: { 
  9.       dir: 'dist'
  10.       format: 'cjs'
  11.       entryFileNames: '[name].cjs.js'
  12.     }, 
  13.     plugins: [resolve(), commonjs(), typescript()], 
  14.   }, { 
  15.     input: './src/index.ts'
  16.     output: { 
  17.       dir: 'dist'
  18.       format: 'esm'
  19.       entryFileNames: '[name].esm.js'
  20.     }, 
  21.     plugins: [resolve(), commonjs(), typescript()], 
  22.   } 
  23. ]; 

可以同時生成支持 CommonJS 和 ESModule 的文件,在前面 tsconfig.json 配置下還會生成 index.d.ts 文件用于指明類型聲明。

4.3 修改 scripts

來到 package.json 文件中,為了使用快捷指令,以及調用 rollup 作為開發的預覽功能,需要配置 scripts 字段如下:

  1. "scripts": { 
  2. +  "dev""rollup -w -c"
  3. +  "build""rollup -c" 
  4. -  "test""echo \"Error: run tests from root\" && exit 1" 
  5. }, 

如此,我們便可以通過 yarn dev,就能在開發的時候實時編譯。

如果需要打包,則先執行 yarn build 命令即可完成打包。

五、ESlint 配置

如果是小團隊協作開發,就會涉及到代碼規范問題,換個角度,如果是開源的產品,有人提 MR 的時候,我們會希望他的代碼風格是比較符合我們一些預期的,因此將在項目中引入 ESlint。

先安裝 eslint 開發環境依賴

  1. yarn add eslint -D 

然后可以使用剛安裝好的 eslint 初始化一個配置文件:

  1. ./node_modules/.bin/eslint --init 

這樣在項目的根目錄就有一個 .eslintrc.json 配置文件,

然后可以根據自己的需要去修改 ESlint 的一些規則,筆者配置好的規則內容如下:

  1.   "env": { 
  2.     "browser"true
  3.     "commonjs"true
  4.     "es2021"true 
  5.   }, 
  6.   "extends": ["eslint:recommended""plugin:@typescript-eslint/recommended"], 
  7.   "parser""@typescript-eslint/parser"
  8.   "parserOptions": { 
  9.     "ecmaVersion": 8 
  10.   }, 
  11.   "plugins": ["@typescript-eslint"], 
  12.   "rules": { 
  13.     "@typescript-eslint/no-unused-vars":  [ 
  14.       "error"
  15.       { 
  16.         "varsIgnorePattern""^_" 
  17.       } 
  18.     ], 
  19.     "no-unused-vars""off"
  20.     "no-console""warn"
  21.     "space-before-function-paren""warn"
  22.     "semi""warn"
  23.     "quotes": ["warn""single"
  24.   } 

六、Prettier 代碼自動格式化

前端開發項目中會涉及到一些代碼格式問題,比如函數括號后空格,CSS 格式,因此可以借助 Prettier 三方工具來實現團隊代碼的自動統一。

安裝 prettier

  1. yarn add prettier -D 

然后新建一個 .prettierrc.json 的配置文件,內容如下:

  1.   "printWidth": 100, //單行長度 
  2.   "tabWidth": 2, //縮進長度 
  3.   "useTabs"false, //使用空格代替tab縮進 
  4.   "semi"true, //句末使用分號 
  5.   "singleQuote"true, //使用單引號 
  6.   "bracketSpacing"true, //在對象前后添加空格-eg: { foo: bar } 
  7.   "arrowParens""avoid" //單參數箭頭函數參數周圍使用圓括號-eg: (x) => x 

更多使用規則可以參考:Configuration File[2]

開發者可以通過快捷鍵 Shift + Commond + F 來實現當前文件的格式化排版。

七、Husky Git 提交約束

當然除了手動格式化,如果開發者沒有格式化就提交代碼到遠程了怎么辦,為此,引入 Husky 作為 Git commit 提交前做一個自動格式化暫存區內的文件,以及校驗是否符合 Eslint 規則。

與此同時,還需要將用戶的 git commit message 規范,可以引入 commitlint 工具,用于校驗提交的 message 格式是否符合規范

具體的規范可以參考:Conventional Commits[3]

首先安裝開發環境依賴:

  1. yarn add husky@3.1.0 -D 
  2. yarn add lint-staged -D 
  3. yarn add @commitlint/cli -D 
  4. yarn add @commitlint/config-conventional -D 

然后在 package.json 文件中新增如下內容:

  1. "husky": { 
  2.   "hooks": { 
  3.     "pre-commit""lint-staged"
  4.     "commit-msg""commitlint -E HUSKY_GIT_PARAMS" 
  5.   } 
  6. }, 
  7. "commitlint": { 
  8.   "extends": [ 
  9.     "@commitlint/config-conventional" 
  10.   ] 
  11. }, 
  12. "lint-staged": { 
  13.   "*.{ts,js}": [ 
  14.     "node --max_old_space_size=8192 ./node_modules/.bin/prettier -w"
  15.     "node --max_old_space_size=8192 ./node_modules/.bin/eslint --fix --color"
  16.     "git add" 
  17.   ] 
  18. }, 

這樣配置好了后,開發者在 git commit 時,會首先調用 lint-staged 字段中命令,首先是 prettier 格式化,然后是 ESlint 校驗并修復,然后將修改后的文件存入暫存區。

然后是校驗 commit message 是否符合規范,符合規范后才會成功 commit。

八、預發包前升級版本并構建

為了實現快捷發包,可以在 package.json 文件的 scripts 字段添加快捷命令,用于規范發包。

添加如下命令,可以在發包(執行 npm publish 命令)之前首先會提示升級包本本,然后 build 構建出產物

  1. "prepublish""yarn version && yarn build" 

九、完成初始化

由于是開源庫,所以咱把 package.json -> license 字段的值改為 MIT,可以參考:什么是MIT 協議[4] 。

初始化的收尾工作就是將當前的變動存入 Git 記錄中并關聯遠程倉庫。

Git 遠程同名倉庫的創建就不贅述了,可以參考:創建倉庫 - Github Docs[5]

然后我們將本地的代碼 staged 并 commit

  1. git add -A 
  2.  
  3. git commit -m "feat: init" 

關聯遠程倉庫并將本地代碼提交到遠程倉庫:

  1. git remote add origin "https://xxxx.com/xx/xx.git" 
  2.  
  3. git push -u origin master 

此后,我們可以把當前倉庫作為一個開發支持 Typescript 的 NPM 包的模板倉庫,后續開發新的 NPM 包,只需要克隆當前模板,然后再根據需要修改配置,新增 rollup 編譯插件等就可以啦!

總結

梳理了在初始化構建一個工程項目中需要做的事情,涉及打包構建、開發、Git、發包的內容,從 0 到 1 愉快地完成了項目的初始化,后續就可以更加愉快地開發了。

TODO: 可以發現這種項目初始環境既然是相同的,可以賦予它模板的概念,那么是不是可以再動手寫一個屬于自己團隊的開發腳手架(CLI),用于初始化項目?

 

責任編輯:武曉燕 來源: DYBOY
相關推薦

2022-01-26 00:02:00

Nacos服務注冊中心

2022-09-06 08:40:33

應用系統登錄方式Spring

2009-12-03 16:24:09

WinXP搭建PHP開

2024-05-09 10:26:14

2009-12-02 18:25:19

Suse Linux

2022-02-25 08:32:07

nodemon搭Node.jsJavascript

2021-07-29 07:55:19

Demo 工作池

2021-07-19 07:01:20

Chrome 插件瀏覽器

2020-09-23 07:45:32

Docker前端

2020-09-15 10:25:13

Redis命令Java

2022-08-15 09:22:12

JWT認證系統

2023-08-31 22:05:02

SAN環境存儲

2022-09-08 11:44:17

EW匯編器連接定位器

2022-06-21 08:52:47

Node.js服務端JavaScript

2023-10-18 08:03:40

2024-06-03 08:09:39

2024-07-19 08:21:24

2024-06-06 09:44:33

2024-12-19 00:16:43

2024-08-21 08:21:45

CNN算法神經網絡
點贊
收藏

51CTO技術棧公眾號

精品1卡二卡三卡四卡老狼| 7777精品久久久大香线蕉小说| 亚洲图色中文字幕| 五月婷婷在线播放| 国产一区日韩一区| 欧美日韩中文字幕精品| 国产精品日韩欧美一区二区三区| 久久嫩草捆绑紧缚| 秋霞国产精品| 国产亚洲一区字幕| 欧美一区二区三区……| 成人性生活免费看| 国产不卡123| 高清国产一区二区| 欧美日韩福利视频| gogo亚洲国模私拍人体| 黄在线免费看| 激情成人综合网| 久久精品男人天堂| 午夜激情视频网| 在线视频国产区| 国产精品系列在线观看| 久久国产加勒比精品无码| 亚洲美女爱爱视频| 秋霞影院午夜丰满少妇在线视频| 日韩精品每日更新| 在线观看免费高清视频97| 欧美成人黑人猛交| 国产精品二线| 日本成人在线不卡视频| 中文字幕日韩av电影| 亚洲欧洲日本精品| 看女生喷水的网站在线观看| 国产一区二区三区观看| 久久99久国产精品黄毛片入口| 青娱乐国产精品视频| 美女91在线| 99re这里都是精品| 国产精品久久999| 日韩av手机在线免费观看| 老司机亚洲精品一区二区| 亚洲一区二区三区在线| 欧美激情第一页在线观看| 波多野结衣激情视频| 国产精品福利在线观看播放| 日韩一区二区视频| 久久国产精品网| 国产一级网站视频在线| 久久99精品国产麻豆婷婷| 久久91精品国产91久久跳| 亚洲国产精品无码久久久久高潮| 欧美日韩国产网站| 一区二区三区蜜桃| 欧美激情视频一区二区三区| 一区二区三区免费观看视频| 黄色成人91| 国产一区二区三区三区在线观看| 国产精品自拍视频在线| 美洲精品一卡2卡三卡4卡四卡| 26uuu精品一区二区| 国产欧美一区二区白浆黑人| 国产亚洲欧美精品久久久www | 国产精品日韩一区二区三区 | 免费看黄色三级| 国产麻豆精品| 色婷婷亚洲综合| 欧美在线观看黄| 成人免费视频| 99精品视频中文字幕| 91久久国产综合久久91精品网站| 国偷自拍第113页| 中文字幕一区二区av| 亚洲午夜女主播在线直播| 潘金莲一级淫片aaaaa| 日本一区二区三区视频在线| 亚洲国产成人av| 26uuu成人| 国产中文在线| www国产精品av| 国产精品一 二 三| 精品人妻伦一二三区久久| 蜜芽一区二区三区| 日韩av片免费在线观看| 免费毛片一区二区三区| 欧美欧美天天天天操| 色老头一区二区三区| av网站免费在线看| 亚洲精品一级二级三级| 亚洲成人在线视频播放| 日韩大尺度视频| 成人自拍视频| 91精品国产美女浴室洗澡无遮挡| 亚洲xxxx2d动漫1| 欧美艳星kaydenkross| 欧美视频免费在线观看| 霍思燕三级露全乳照| 91精品久久| 亚洲免费成人av| 在线观看免费黄色片| 91caoporm在线视频| 欧美激情一区在线| 亚洲欧洲精品一区二区| 888av在线| 中文字幕一区二区三区精华液| 亚洲 国产 日韩 综合一区| 国产中文在线视频| 国产精品沙发午睡系列990531| 日本不卡一区二区三区在线观看 | 中文字幕亚洲一区二区三区五十路 | 91精品国产福利在线观看| 亚洲欧美另类动漫| 福利一区和二区| 欧美日韩国产首页| 91小视频在线播放| 国产一区二区三区| 日韩精品一区二区三区中文不卡 | 色屁屁影院www国产高清麻豆| 国产一区91| 2019中文字幕在线观看| 中文字字幕在线中文| 久久亚洲电影| 国产在线拍偷自揄拍精品| 91成人在线免费| 国产一区二区三区四区五区入口 | 综合亚洲自拍| 一区二区在线视频| 国产高潮流白浆| 伊人成人在线| 国产成人精品在线播放| 在线观看毛片视频| 国产aⅴ综合色| 久久av免费一区| h网站在线免费观看| 亚洲欧美日韩系列| 欧美日韩免费在线观看| 国产精品swag| 婷婷在线免费观看| 91香蕉视频污在线| 无遮挡亚洲一区| www久久日com| 亚洲成人动漫在线观看| 成年人在线看片| 国产一区二区三区免费在线| 精品久久五月天| 无码一区二区三区在线| 亚洲国产精品日韩专区av有中文| 久久乐国产精品| 最近中文字幕在线观看| 国产精品一区二区黑丝| 亚洲一区二区少妇| 亚洲色偷精品一区二区三区| 中文字幕欧美区| 欧美乱做爰xxxⅹ久久久| 日韩高清成人| 亚洲第一免费网站| 国产传媒视频在线| 亚洲第一黄色| 国产主播在线一区| 久蕉依人在线视频| 亚洲尤物视频在线| 黄色三级视频片| 深夜福利一区| 色天天综合狠狠色| 国产无套丰满白嫩对白| 国产乱对白刺激视频不卡| 欧美精品久久久| 中文字幕中文字幕在线十八区| 亚洲精品国产视频| 亚欧激情乱码久久久久久久久| 久久久久观看| 国产视频精品xxxx| 久久婷婷五月综合| 精品69视频一区二区三区Q| 国产精品视频xxx| 十九岁完整版在线观看好看云免费| 亚洲天堂成人在线观看| 色诱视频在线观看| 色哟哟精品丝袜一区二区| 久久国产色av| 夜夜嗨aⅴ一区二区三区| 99精品一区二区| 久久久成人精品一区二区三区| 亚洲高清黄色| 日韩毛片在线看| 国产亚洲精品久久777777| 韩国一区二区视频| 视频一区免费观看| 一级毛片久久久| 亚洲国产精品一区二区久| 久热这里有精品| 国精产品一区一区三区mba桃花 | 日本乱人伦a精品| 日本黄色免费视频| 一区二区三区丝袜| 永久看看免费大片| 你懂的视频一区二区| 成人xxxxx| 欧美人xxx| 3d动漫精品啪啪| 波多野结衣喷潮| 激情欧美一区二区三区在线观看| 一本色道久久综合亚洲精品婷婷| 韩国精品视频在线观看 | 免费精品99久久国产综合精品| 日韩aⅴ视频一区二区三区| 丁香六月综合| 伊人久久精品视频| 亚洲影视一区二区| 亚洲素人一区二区| 香蕉网在线视频| 欧美精品观看| 国产在线精品二区| av电影一区| 在线日韩欧美视频| 国产欧美久久久精品免费| 亚洲激情一二三区| yy1111111| 日韩国产精品久久久久久亚洲| 天堂资源在线亚洲资源| 亚洲成人a级片| 欧美成人自拍视频| 日本高清视频免费观看| 色综合中文字幕| 成年人看的免费视频| 国产综合久久久久影院| 超级碰在线观看| 久久av国产紧身裤| 国产精品va在线播放| 黄网站在线免费看| 亚洲精品电影在线观看| 中文字幕免费高清网站| 日韩一区日韩二区| 亚洲av永久无码精品| 久久精品一区| 中文字幕一区二区三区四区五区人| 激情视频亚洲| 91精品国产91久久久久久| 国产精品影院在线| 欧美一级高清片| 99久热在线精品996热是什么| 国产色产综合产在线视频| 91aaa精品| 国产精品最新自拍| 法国空姐在线观看免费| 天堂网av成人| 亚洲一区中文字幕在线观看| 8x8ⅹ拨牐拨牐拨牐在线观看| 国产一区二区三区免费视频| 性生活视频软件| 欧美在线免费观看亚洲| 精品无码久久久久| 国产精品视频麻豆| 国产精品无码电影| 国产在线不卡一区| 任你操这里只有精品| 国语精品一区| 一区二区三区观看| 五月激激激综合网色播| 91在线在线观看| 成人国产激情| 欧美在线观看网站| 日本高清在线观看| 中文字幕欧美亚洲| 精品无人乱码| 亚洲国产另类 国产精品国产免费| 伊人中文字幕在线观看| 亚洲午夜三级在线| 永久免费未视频| 日本一区二区三区在线不卡| aaaa黄色片| 成人一区二区视频| 国产精品久久久久久久av福利| 视频一区二区中文字幕| 欧美精品久久久久久久自慰| 欧美在线国产| 一区二区视频在线免费| 国产精品一国产精品| 黄色91av| 高潮按摩久久久久久av免费| 亚洲自拍偷拍视频| 国产精品毛片aⅴ一区二区三区| 国产精品99久久久久久久久久久久| 免费成人在线电影| 97精品国产91久久久久久| 青青青国内视频在线观看软件| www.日韩.com| 日本视频在线播放| 中文日韩在线观看| 成年人视频免费在线观看| 国产丝袜视频一区| 手机福利小视频在线播放| 亚洲韩国青草视频| 凸凹人妻人人澡人人添| 亚洲韩国日本中文字幕| 男人天堂综合网| 亚洲国产精品va在线| 亚洲av无码国产精品久久不卡| 91精品国产福利在线观看| 国产欧美久久久| 欧美成人精品1314www| 性做久久久久久久| 欧美精品一区二区蜜臀亚洲| 亚洲精品国产手机| 亚洲国产日韩精品在线| 欧美少妇bbw| 日韩电影中文字幕| 男女网站在线观看| 中国日韩欧美久久久久久久久| youjizz在线播放| 在线看日韩欧美| 成人日韩欧美| 欧美精品激情视频| 美女av在线免费看| 国产成人久久久| 色综合视频一区二区三区日韩| 91视频88av| 成人福利免费在线观看| 免费中文日韩| 999国产精品999久久久久久| 狠狠干视频网站| 一区二区三区导航| 日本久久精品一区二区| 国内成人免费视频| 中文字幕在线永久| 国产女人18毛片水真多成人如厕 | 男人天堂网在线视频| 亚洲欧美国产va在线影院| 国产精品久久久久久久龚玥菲 | 日产欧产美韩系列久久99| 亚洲精品www.| 成人丝袜高跟foot| 这里只有久久精品| 亚洲日本va午夜在线影院| 久草精品视频在线观看| 欧美综合视频在线观看| 99久久久久久久| 日韩精品在线免费观看视频| 888av在线| 98精品国产高清在线xxxx天堂| 嫩草伊人久久精品少妇av杨幂| 91精品中国老女人| 少妇一区二区三区| 欧美一级特黄aaaaaa在线看片| 在线亚洲激情| 在线视频日韩欧美| 国产香蕉久久精品综合网| 免费在线观看一级片| 色妞www精品视频| 亚洲精品网站在线| 在线观看欧美成人| av剧情在线观看| 成人高清视频观看www| 先锋影音国产精品| av日韩在线看| 免费在线欧美视频| 自拍视频一区二区| 亚洲精品视频在线看| jizz国产在线| 亚洲国产又黄又爽女人高潮的| 77导航福利在线| 欧美中文字幕在线视频| 给我免费播放日韩视频| 中文字幕一区二区三区四区五区人| 久久福利一区| 欧美一级片黄色| 亚洲精品久久久久久国产精华液| 真实新婚偷拍xxxxx| 日韩精品极品视频免费观看| 性欧美videoshd高清| 国产精品视频专区| 欧美美女在线| 人人妻人人添人人爽欧美一区| 国产一区二区看久久| 免费91在线观看| 日本韩国欧美在线| 欧美另类自拍| 欧美性视频精品| 欧亚精品一区| 男女啪啪免费视频网站| 国产黄色精品网站| 日韩在线观看视频一区二区| 欧美亚洲国产一卡| 国产福利小视频在线观看| 国产91精品高潮白浆喷水| 国产成人在线中文字幕| 久久香蕉视频网站| 国产精品原创巨作av| 欧美爱爱免费视频| 91精品福利在线一区二区三区| 日本三级视频在线播放| 国产精品稀缺呦系列在线| 欧美日一区二区| 丰满少妇在线观看| 亚洲国产高清在线观看视频| 波多野结衣视频免费观看| 亚洲欧美在线看| 国产成人精品亚洲日本在线观看| 奇米精品在线| 麻豆专区一区二区三区四区五区| 亚洲AV无码成人精品区明星换面|