nodejs的模塊引用,使用相對路徑,會造成寫一堆../,非常不便。
有2種好的修改方式:
1. NODE_PATH設置路徑別名
"scripts": { "start": "cross-env NODE_PATH=.;./mod node index.js", }
NODE_PATH的路徑用分號(Windows)或冒號(Mac OS或linux)分割多個路徑,. 表示本目錄,./mod表示一個子目錄。
缺點是,不同系統設置多個路徑的分隔符不同,用了cross-env也於事無補。
2. module_alias模塊
npm i --save module-alias
// Aliases "_moduleAliases": { "@root" : ".", // Application's root "@deep" : "src/some/very/deep/directory/or/file", "@my_module" : "lib/some-file.js", "something" : "src/foo", // Or without @. Actually, it could be any string } // Custom module directories, just like `node_modules` but with your private modules (optional) "_moduleDirectories": ["node_modules_custom"],
這個模塊可以在packag.json中注冊alias,跟webpack很相似了,好用。
其原理是,修改了nodejs的查找路徑的方法Module._resolveFilename,先從alias中找,然后替換,再用原來的方法找。
修改了nodejs內部的Module._nodeModulePaths,使得_moduleDirectories中的目錄可以實現類似node_modules的效果。