Node.JS目前有二種方式載入module: CommonJS(也就是本文會介紹的方式)及ES6的import/export。
CommonJS是預設的module載入方式,其使用方式為 require & module.exports
1 | function funcA() { |
1 | const funcA = require('funcA'); |
相信大家對此都不陌生,然而此方法最大的問題是module如果是專案的source file,其require的路徑為相對路徑。假如專案結構有許多階層,在使用上會相當不便
1 | |- src |
1 | // singIn.js |
今天介紹在npm script使用symlink解決此問題
在package.json 加入 "postinstall" : "node -e \"var s='../src',d='node_modules/src',fs=require('fs');fs.exists(d,function(e){e||fs.symlinkSync(s,d,'dir')});\""
並且 npm install
1 | // singIn.js |
是不是好看很多?
此方法建立一個symlink連結到專案的source folder,讓CommonJS在node_module下找到要載入的module
但是這樣設定有另一個副作用,如果專案有裝eslint的話,它會跳出import/no-extraneous-dependencies的錯誤。eslint預設禁止載入不在package.json的dependencies, devDependencies, optionalDependencies, peerDependencies或bundledDependencies的模組
如果想忽略此警告,在.eslintrc加上
1 | ... |
以上是修正require不能使用絕對路徑的問題,如果覺得此方式太hack,下一篇介紹import/export來載入module