<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
純nodejs環境,直接使用tsc編譯nodejs。原始碼目錄是src,編譯輸出目錄為bin。程式碼結構如下:
在其他深層次目錄參照utils或者config下的檔案時,總是要寫一長串的'../../../../',還需要數數。這顯然是不能接受的。用過webpack開發的小夥伴們,想想別名功能,typescript這種成熟框架不可能沒有。於是百度一波,得到如下設定:
{ "baseUrl": "./", "paths": { "@utils/*": [ "src/utils/*" ], "@config/*": [ "src/config/*" ], } }
設定完之後,使用如下方式參照a.ts模組:
import A from '@utils/a';
發現我的vscode編輯器已經能識別這個路徑了,當我按下ctrl點選路徑的時候,也自動跳轉到了a.ts檔案。在讚歎自己純熟的技術之餘,把所有的深層次路徑都換成了如上寫法,自信回頭執行npm run start:
一臉懵逼。檢視bin目錄編譯後的js檔案,發現typescript根本沒有按照我的設定,在編譯過程中把這個路徑給優化掉。還是require('@utils/a'):
在搗鼓了很久確定我的tsconfig設定沒有問題後,我無奈又進行了百度,發現typescript
根本不會對別名進行處理,只能藉助第三方編譯工具,例如babel
,webpack
。
但是我一個簡單的nodejs專案,一種編譯器足矣,我為什麼需要再去使用上述編譯器?於是另一個解決方案(chao ji da ken)誕生了:
https://github.com/dividab/tsconfig-paths
對,就是tsconfig-paths,這個工具,我進入其github首頁,發現有1k左右的星星。看了一下外掛介紹,發現正是為了解決這個問題。使用說明也很簡單,參照官方檔案,就一句話:
哇,只要通過-r指令新增一個預處理,再執行編譯後的模組就可以解決我的問題?興沖沖的我立即npm i --save
操作一波, 發現還是出現如下問題:
這次確定是是走了他的預處理了。為什麼還是不生效???翻看其檔案,也找不到任何有用的資訊。到這裡,大多數小夥伴估計都放棄了,但是今晚耗上了,一個別名問題居然拖了我這麼長時間,於是我開始了原始碼偵錯,找一下到底是什麼原因。
設定vscode偵錯程式,新增執行引數:
{ "type": "pwa-node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "runtimeArgs": [ "-r", "${workspaceFolder}/node_modules/tsconfig-paths/register" ], "program": "${workspaceFolder}\bin\index.js" }
偵錯原始碼,發現其核心功能就是讀取tsconfig檔案,獲取paths(別名)對映,覆寫path._resolveFilename,匹配對映,解析獲取真正的模組。嗯,倒是不復雜
我在這裡加了個條件斷點,找到了我的utils/common
的模組請求,發現found
為空…問題就出在這裡了。於是進一步查詢。發現其匹配規則沒問題,只是匹配到之後,尋找模組時使用的路徑居然是原始tsconfig中設定的src
…
我的執行目錄明明在bin目錄!
這也太不智慧了,你好歹讀一下tsconfig裡的outDir屬性吧!
現在沒辦法了,為了適配他的程式碼,只能修改tsconfig的paths設定如下:
{ "baseUrl": "./", "paths": { "@utils/*": [ "src/utils/*", "bin/utils/*" ], "@config/*": [ "src/config/*", "bin/config/*" ], } }
這樣他拼接的時候就能找到我的模組了,問題終於解決!
到此這篇關於typescript在node.js下使用別名(paths)無效問題詳解的文章就介紹到這了,更多相關typescript在node.js使用別名無效內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45