一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 手摸手學會搭建一個 TS+Rollup 的初始開發環境

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

2021-11-12 22:25DYBOY 編程技術

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

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

目前市面上有許多 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. cd dyboy-npm-ts-template
  3. touch index.ts
  4. npm init -y

二、初始化 Typescript 環境

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

  1. yarn add typescript -D

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

  1. tsc --init

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

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

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

這樣配置好后,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. 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. export default [
  5. {
  6. input: './src/index.ts',
  7. output: {
  8. dir: 'dist',
  9. format: 'cjs',
  10. entryFileNames: '[name].cjs.js',
  11. },
  12. plugins: [resolve(), commonjs(), typescript()],
  13. }, {
  14. input: './src/index.ts',
  15. output: {
  16. dir: 'dist',
  17. format: 'esm',
  18. entryFileNames: '[name].esm.js',
  19. },
  20. plugins: [resolve(), commonjs(), typescript()],
  21. }
  22. ];

可以同時生成支持 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

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

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

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

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

六、Prettier 代碼自動格式化

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

安裝 prettier

  1. yarn add prettier -D

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

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

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

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

七、Husky Git 提交約束

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

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

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

首先安裝開發環境依賴:

  1. yarn add [email protected] -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. git commit -m "feat: init"

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

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

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

總結

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

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

原文鏈接:https://mp.weixin.qq.com/s/BN-zEcfqQX0UFpX9Ae9ApQ

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产激情一区二区三区成人91 | 国产色综合久久五月色婷婷中文 | 香蕉eeww99国产在线观看 | 久草在线草a免费线看 | 视频一区二区在线 | 性妲己 | 国产精品露脸国语对白99 | 91李宗精品72集在线观看 | 操美女骚b | 国产成人一区二区三区在线视频 | 波多野结衣中文字幕 | 日韩精品欧美 | 调教老师肉色丝袜的故事 | 垫底辣妹免费观看完整版 | 大学生宿舍飞机 free | 窝窝影院午夜色在线视频 | 日韩欧美国产一区二区三区 | jux539原千岁在线播放 | 青青青久在线视频免费观看 | 久久久精品日本一区二区三区 | 久久精品99国产精品日本 | a级特黄毛片免费观看 | 亚洲精品视频网 | 第一次出血videos | 美女张开大腿让男人桶 | 日本一区二区在线不卡 | 亚洲精品一二三四区 | 九九热视频 这里有精品 | 日本一区三区 | 午夜精品国产自在现线拍 | 欧美日韩国产精品自在自线 | 日本 视频 在线 | 午夜国产在线 | 国产极品麻豆91在线 | 日本暖暖在线 | 全程粗语对白视频videos | 特色特色大片在线 | 精品国产欧美一区二区三区成人 | 日韩在线 在线播放 | 女同久久另类99精品国产 | 无码中文字幕热热久久 |