我對 Node.js 很陌生,目前正在實作一個包含 zip 的節點模塊。安裝(安裝后)后,zip 被解壓縮到模塊的子檔案夾中。此外,main.js 腳本為呼叫者提供了一種方法,該方法回傳提取檔案之一的完整路徑。
模塊的結構如下所示:
module_A
|- package.json
|- lib
| └ postinstall.js
|- resources
| └ ide.zip
|- extracted
| └ ide.bat
└- main.js
到目前為止,要求似乎“簡單”,但是我對如何回傳提取檔案的完整路徑沒有想法。目前我的main.js腳本如下所示:
const path = require('path');
exports.getServerBatch = function() {
return path.resolve('/extracted/ide.bat');
}
在另一個專案中使用該模塊時...
C:\projects\myproject\
|- package.json (includes dependency to module_A)
|- node_modules
| └ module_A
| |-main.js
| |-extracted
| └ ide.bat
| ...
...并使用 VSCode 進行除錯,回傳的路徑如下所示:
C:\Users\<my_user>\AppData\Local\Programs\Microsoft VS Code\extracted\ide.bat
代替:
C:\projects\myproject\node_modules\module_A\extracted\ide.bat
如果我從另一個地方呼叫該方法,路徑就會改變。這讓我認為完整路徑始終取決于應用程式的執行位置。
有沒有辦法在不使用執行路徑的情況下回傳我需要的完整路徑?
uj5u.com熱心網友回復:
由于 vs 代碼在該位置啟動程式,因此該path.resolve()函式path相對于process working directory您的情況解決了給定的問題C:\Users\<my_user>\AppData\Local\Programs\Microsoft VS Code。
有一個全域稱為__dirname檔案所在的檔案夾。
你可以試試這個 main.js
const path = require('path');
exports.getServerBatch = function() {
// join concacinates paths. Handy for being crossplattform. I suggest to use it
// always for putting paths together.
return join(__dirname, 'extracted', 'ide.bat');
}
筆記:
使用OR 等__dirname打包器時可能會導致問題。某些模塊允許使用并始終參考使用哪個是程式作業目錄。webpackpkg__dirnameprocess.cwd()
uj5u.com熱心網友回復:
經過更多的研究,我找到了一個似乎作業正常的解決方案:
module.exports.serverPath = path.join(__dirname, 'extracted/ide.bat');
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/383084.html
