開發累積了些經驗後已經有一些用著趁手的套件,也做了一些將這些套件封裝後的工具,開了新專案的時候可以用 fork 或是將工具發布到 npm 上的方式來重用這些工具,但當在舊專案上修改或優化這些工具的時候,要將修改套用到共用這些工具的其他專案上時總要多費點功夫。
在看到 NX 這個工具的介紹後覺得能用來改善上面遇到的情況,就趁這機會多瞭解學習。
首先列一下想要達成的效果:
基本上會是個邊摸邊學的過程,有什麼錯誤或可以改善的地方都請不吝指教。
先直接動手,過個幾篇再來統整知識點跟觀念。
用指令啟動一個 NX 專案:
npx create-nx-workspace@latest --pm pnpm
pm
選項可以指定使用的套件管理工具,預設 npm
其他可選得有 yarn
、 pnpm
直接使用指令的話會有選項可以選擇起始模板的設定,不過也可以直接指定模板跳過選項
npx create-nx-workspace@latest --preset=react-standalone
以上指令會建立一個 react 模板的 standalone 模式專案,standalone 具體是什麼之後再說明,這次要做的是 nextjs 模板的 integrated 專案,所以不指定模板而經由選項設定專案。
✔ Where would you like to create your workspace? · ironman-nextjs
✔ Which stack do you want to use? · react
✔ What framework would you like to use? · nextjs
✔ Integrated monorepo, or standalone project? · integrated
✔ Application name · ironman-nextjs
✔ Would you like to use the App Router (recommended)? · Yes
✔ Test runner to use for end to end (E2E) tests · cypress
✔ Default stylesheet format · css
✔ Enable distributed caching to make your CI faster · No
選 nextjs 模板的話會再額外問說要不要使用 nextjs 的 App Router 結構,想著這次順帶學習下所以這邊是選擇使用的。
另外 Enable distributed caching to make your CI faster
這一問,要使用的話要註冊 NX Cloud 才可以,所以不選。
看一下產生的結構:
.
├── apps
│ ├── ironman-nextjs
│ │ ├── ...
│ │ └── project.json
│ └── ironman-nextjs-e2e
│ └── ...
├── libs
├── tools
│ └── tsconfig.tools.json
├── jest.config.ts
├── jest.preset.js
├── nx.json
├── package.json
├── pnpm-lock.yaml
├── README.md
└── tsconfig.base.json
apps
放的是專案,像是網頁專案或後端專案都放這,也可以放測試專案,像這次的模板就自動產生了 cypress 的 e2e 測試專案。
NX integrated 架構下的 app 不會用 package.josn
,而是用 project.json
,具體的作用之後說明。
libs
放的是組件,想要跨專案使用的組件都可以放這。
tools
放的是不會直接在專案程式中運作的工具,像是 bash 檔案。
來讓專案跑起來,指令:
pnpm nx serve ironman-nextjs
今天先開好專案,明天開始把套件給裝進來。
Hi 這次分享 NX 的大大您好,我是這幾天才看到,大大這裡分享 NX 的文章,剛好我司最近也正在採用 NX + Monorepo 的專案,然後前端是使用 React,所以也剛好可以拜讀大大的文章,讓我自己對 NX 這方面更有了解。
這裡有個小請求,關於 NX 這方面,後面的文章可以分享更難一點點嗎 !? (跪謝)
如有冒犯之處,請見諒 !
我也是最近才開始摸這個框架的,具體能挖多深我也不曉得,目前就是按自己需要的功能去研究,要說難一點點也不清楚要往哪邊挖呢?
可能直接留下遇過什麼想解決的問題比較有方向,可以一起想。
好的,借這個機會,我也會去了解,我公司目前使用 NX 跟 Monorepo 的細節或是有無碰到問題,將來也跟大大您交流,感謝。