<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          居然有比 npm link 更好的調(diào)試?

          共 2322字,需瀏覽 5分鐘

           ·

          2021-12-25 10:01

          在一個(gè)項(xiàng)目中,我們會(huì)用 HRM 熱更新來(lái)讓我們修改的代碼在瀏覽器中快速看到效果,快速驗(yàn)證我們的代碼是否正確。

          當(dāng)項(xiàng)目開(kāi)始變大,為了提效、跨項(xiàng)目復(fù)用,我們會(huì)不可避免的需要開(kāi)始去拆分一些通用的 NPM 模塊。

          對(duì)于 NPM 包的調(diào)試方式,傳統(tǒng)的方法是下面這樣子的:

          一、直接修改 dependencies

          {
          ??"dependencies":?{
          ????"npm-test":?"file:實(shí)際包地址"
          ??}
          }

          真正的純手工 ??,上線(xiàn)后還需要時(shí)刻記得修改 dependencies,現(xiàn)在應(yīng)該也沒(méi)什么人用這種方法了,不細(xì)講了。

          二、npm link

          官方文檔[1]

          原理:將調(diào)試的包跟項(xiàng)目中做一個(gè)軟鏈

          cd?對(duì)應(yīng)npm包地址
          npm?link

          之后可以在命令行中看到如下日志,則說(shuō)明 npm 庫(kù)已經(jīng)鏈接到你本地 node_modules 下面了

          ??Installed?17?packages
          ??Linked?1?latest?versions
          ??Run?0?scripts
          ??All?packages?installed?(used?213ms(network?209ms),?speed?4.25KB/s,?json?1(910B),?tarball?0B)
          link?/Users/beidan/.nvm/versions/node/v14.5.0/lib/node_modules/npm-test@?->?/對(duì)應(yīng)的包實(shí)際地址

          之后只需要將項(xiàng)目對(duì)應(yīng)的包鏈到你本地的全局地址即可

          cd?項(xiàng)目地址
          npm?link?npm-test

          同樣的,我們可以在命令行中看到如下日志,則說(shuō)明項(xiàng)目中的包也已經(jīng)鏈接成功

          link?/對(duì)應(yīng)的包實(shí)際地址@?->?/Users/beidan/.nvm/versions/node/v14.5.0/lib/node_modules/npm-test

          對(duì)于 Npm link 方式,「因?yàn)?Npm 和 項(xiàng)目屬于不同的項(xiàng)目,它們有自己的 node_modules」,如果組件和應(yīng)用都使用了同一個(gè)依賴(lài),它們會(huì)在各自的 node_modules 去查找,如果這個(gè)依賴(lài)不支持多例,應(yīng)用就會(huì)異常。如果 npm 的編譯規(guī)則 和應(yīng)用的編譯規(guī)則不匹配,也同樣會(huì)出問(wèn)題。如下:

          hooks?can?only?be?called?inside?the?body?of?a?function?component
          ?

          NPM 組件 和你的項(xiàng)目使用了 React Hooks 的情況,React 會(huì)報(bào)致命異常。(原因是 React Hooks 依賴(lài)上下文,所以全局只能使用一個(gè),即使是版本完全一樣的,官方推薦的解決方法 React 錯(cuò)誤提示[2]

          ?

          三、更好的調(diào)試方式:yalc

          官方文檔[3]

          yalc 將組件的包依賴(lài)提升至應(yīng)用中,在全局添加組件依賴(lài),在應(yīng)用下新建文件拉取依賴(lài),即使有共同的依賴(lài)也會(huì)從應(yīng)用的 node_modules 去查找。「使用 yalc 可以避免上面 npm link 的依賴(lài)問(wèn)題」

          使用起來(lái)也非常方便:

          npm?i?yalc?-g
          yalc?publish?//?在對(duì)應(yīng)的?npm?包中發(fā)布

          yalc?link?//?在對(duì)應(yīng)的項(xiàng)目中?link?對(duì)應(yīng)的包

          四、實(shí)際應(yīng)用

          我們期望的工作流程是這樣子的。

          在灰色區(qū)域,期望是自動(dòng)化的,而不是寫(xiě)一下代碼,重新 build 一下, 那自動(dòng)監(jiān)聽(tīng)更新文件可以用一下 nodemon 。

          nodemon 可以來(lái)監(jiān)視文件更改并執(zhí)行對(duì)應(yīng)的命令。

          nodemon
          ?--ignore?dist/?#?忽略目錄
          ?--ignore?node_modules/
          ?--watch?projects?#?觀(guān)察目錄
          ?-C?#?只在變更后執(zhí)行,首次啟動(dòng)不執(zhí)行命令
          ?-e?ts,html,less,scss?#?監(jiān)控指定后綴名的文件
          ?--debug?#?調(diào)試
          ?-x?"npm?run?build?&&?yalc?push"?#?自定義命令
          ?

          可以通過(guò) nodemon -h 查看更多命令

          ?

          結(jié)合 yalc ,我們來(lái)重新改造下 npm 包調(diào)試的流程。

          一、在 npm 包中增加命令

          npm 命令我寫(xiě)過(guò)一篇文章,不了解可以看一下:?你要知道的 Npm Script 都在這里

          "scripts":?{
          ????"build":?"打包包的命令",
          ????"async":?"npm?run?build?&&?yalc?push",
          ????"watch":?"nodemon?--ignore?dist/?--ignore?node_modules/?--watch?src/?-C?-e?ts,tsx,scss?--debug?-x?'tnpm?run?async'",?//?自動(dòng)監(jiān)聽(tīng)
          ??},

          二、項(xiàng)目中

          yalc?link?包名
          npm?run?start

          這樣子,在 npm 包中修改,在項(xiàng)目中可以快速看到結(jié)果,快速驗(yàn)證了,并且不會(huì)出現(xiàn) npm link 中各種奇奇怪怪的問(wèn)題。

          Reference

          [1]

          官方文檔: https://docs.npmjs.com/cli/v7/commands/npm-link

          [2]

          React 錯(cuò)誤提示: https://zh-hans.reactjs.org/warnings/invalid-hook-call-warning.html]

          [3]

          官方文檔: https://github.com/wclr/yalc

          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www三级| 91久久精品日日躁夜夜躁欧美 | 青青草超碰免费 | 99青草在线免费观看视频 | 日本狠狠撸|