如何通过postinstall npm脚本自动将文件从包复制到本地目录?

时间:2016-01-14 04:12:24

标签: node.js npm package install post-install

我想在运行后自动将某些文件从-DTARGET_ENVIRONMENT包复制到用户的本地目录

npm

我可以通过在npm install my-package内声明"files"来安装它们。问题是---文件没有放在本地目录中。所以我需要运行package.json脚本。

但现在我不知道软件包的安装位置(可能在目录树的更高位置),那么如何通过脚本可靠地访问文件并将它们复制到本地目录?

(通过本地目录我的意思是 - 从我运行postinstall 的用户消费包裹。)

更新。似乎npm install my-package脚本作为postinstall拥有的进程运行,主目录为npm,所以我仍然不知道如何访问用户的主目录而不是天真的node_modules/my-package

5 个答案:

答案 0 :(得分:5)

从npm 3.4开始,您可以使用$ INIT_CWD envar: https://blog.npmjs.org/post/164504728630/v540-2017-08-22

  

运行生命周期脚本时,INIT_CWD现在将包含执行npm的原始工作目录。

要解决此问题,请在package.json中的以下安装后脚本中添加以下内容:

  "scripts": {
    "postinstall": "cp fileYouWantToCopy $INIT_CWD",
  },

答案 1 :(得分:3)

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

  

注意:如果要解析的参数具有零长度字符串,那么将使用当前工作目录而不是它们。

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

答案 2 :(得分:1)

我会使用shellscript / bash

-package.json

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

-postinstall.sh

#!/bin/bash

# go to YOUR_NEEDED_DIRECTORY .e.g "dist" or $INIT_CWD/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

答案 3 :(得分:0)

经过大量搜索,我发现它可以跨平台工作

"scripts":
  "postinstall": "node ./post-instal.js",

// post-install.js

/**
 * Script to run after npm install
 *
 * Copy selected files to user's directory
 */

'use strict'

var gentlyCopy = require('gently-copy')

var filesToCopy = ['.my-env-file', 'demo']

// User's local directory
var userPath = process.env.INIT_CWD

// Moving files to user's local directory
gentlyCopy(filesToCopy, userPath)

答案 4 :(得分:0)

如果您是用yarn或npm构建的。您只能执行“ cp”操作。


    "scripts": {
        "start": "yarn run tailwind && react-scripts start",
        "build": "yarn run tailwind && yarn run purge-tailwind && cross-env GENERATE_SOURCEMAP=false react-scripts build &&  cp .htaccess build/ ",
    },

如果在构建后需要此.htaccess,只需在build npm指令后添加此.htaccess。 && cp .htaccess build/