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

Dmi*_*sev 17 install package node.js npm post-install

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

npm install my-package

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

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

(通过本地目录,我的意思是---从npm install my-package 用户消费包的地方开始.)

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

jor*_*ins 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",
  },
Run Code Online (Sandbox Code Playgroud)


Dav*_*haw 5

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

"scripts":
  "postinstall": "node ./post-install.js",
Run Code Online (Sandbox Code Playgroud)

// 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)
Run Code Online (Sandbox Code Playgroud)


小智 3

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

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

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