2016-01-14 85 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

目前还不清楚这可以如何提供帮助,但我仍然需要知道如何引用本代码中的本地目录,所以仍存在同样的问题。 –

相关问题