2016-01-14 84 views
12

我想自動從npm包運行如何通過postinstall npm腳本自動將文件從軟件包複製到本地目錄?

npm install my-package

我可以讓他們安裝通過聲明"files"package.json後複製某些文件到用戶的本地目錄。問題是---文件沒有放在本地目錄中。所以我需要運行postinstall腳本。

但是現在我不知道軟件包的安裝位置(可能高於目錄樹),那麼如何可靠地訪問這些文件並通過腳本將它們複製到本地目錄?

(通過本地目錄我的意思是---我從哪裏跑npm install my-package爲用戶消耗包)。

更新。看來postinstall腳本作爲npm擁有的進程運行,主目錄是node_modules/my-package,所以我仍然不知道如何訪問用戶的主目錄,而不是使用天真的../../

+0

一個古老的問題,我知道但我面臨着類似的問題。你有沒有找到一個好的解決方案呢? – danielv

+0

@danielv是的,請參閱https://github.com/dmitriz/min-karma –

+0

謝謝。我希望你找到了一個更優雅的解決方案來找到除'../../'之外的基本安裝目錄。 – danielv

回答

3

var cwd = require('path').resolve();

注:如果參數來解決具有零長度字符串,則當前的工作目錄將被用來代替它們。

https://nodejs.org/api/path.html

+0

我仍然對'postinstall'腳本中的'cwd' - 本地目錄或安裝文件的位置感到困惑嗎? –

+0

'cwd'總是執行程序的地方。如果你需要從文件本身獲取當前js文件的路徑,那麼每個文件中都有'__filename'和'__dirname'變量。 – hexagoncode

+0

我需要本地目錄的路徑,請參閱我的問題中的最後一行來定義我的意思 –

0

我會使用的shell/bash的

-package.json

"scripts": 
    "postinstall": "./postinstall.sh", 

-postinstall.sh

#!/bin/bash 

# go to YOUR_NEEDED_DIRECTORY .e.g "dist" 
cd YOUR_NEEDED_DIRECTORY 

# copy each file/dir to user dir(~/) 
for node in `ls` 
do 
    cp -R $node ~/$node 
done 

不要忘了!

chmod +x postinstall.sh 
+0

目前還不清楚這可以如何提供幫助,但我仍然需要知道如何引用本代碼中的本地目錄,所以仍存在同樣的問題。 –

相關問題