我想在运行后自动将某些文件从-DTARGET_ENVIRONMENT
包复制到用户的本地目录
npm
我可以通过在npm install my-package
内声明"files"
来安装它们。问题是---文件没有放在本地目录中。所以我需要运行package.json
脚本。
但现在我不知道软件包的安装位置(可能在目录树的更高位置),那么如何通过脚本可靠地访问文件并将它们复制到本地目录?
(通过本地目录我的意思是 - 从我运行postinstall
的用户消费包裹。)
更新。似乎npm install my-package
脚本作为postinstall
拥有的进程运行,主目录为npm
,所以我仍然不知道如何访问用户的主目录而不是天真的node_modules/my-package
答案 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();
注意:如果要解析的参数具有零长度字符串,那么将使用当前工作目录而不是它们。
答案 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/