我有一个命令,我通常会在POST /dmanager/v5/updateprofile/ HTTP/1.1
Host: host.com
Content-Type: application/json
Authorization: Basic aHNoc25hbmE4MjMxOmpzanNqc2pzampz
Cache-Control: no-cache
Postman-Token: 23a32222-db02-b8bb-63cb-da5faffc27be
{"age":23,"phone_number":"","user_id":19709,"weight":25,"key":"jsjsjsjsjjs","set_first_login":"true","first_name":"Suisse","height":91.44,"last_name":"","email":"hshsnana@jsjsja.com","gender":"M"}
的{{1}}部分运行,但问题是scripts
使用package.json
,它不支持过程替代。
我需要进程替换,因为我想将args传递给npm run
的结果,而不能用管道来做。
所以我编写了以下脚本:
sh
现在的问题是,当我使用进程替换时,节点无法找到已安装的模块。在运行flow-remove-types index.js
的case语句中使用#!/bin/bash
PATH=./node_modules/.bin:$PATH
case $1 in
start)
node <(flow-remove-types index.js) ${@:2}
;;
works)
flow-remove-types index.js | node
;;
esac
命令运行在查找模块时没有问题,但是当我运行带有进程替换的命令works
时。我得到以下堆栈跟踪
flow-remove-types index.js | node
有谁知道为什么会这样?为什么节点无法访问start
中安装的模块。
答案 0 :(得分:1)
我的猜测是,当你跑步时:
flow-remove-types index.js | node
然后node
尝试在当前工作目录中找到node_modules
目录,因为它不知道脚本的位置 - 它通过STDIN获取。
但是当你跑步时:
node <(flow-remove-types index.js)
然后node
不会在STDIN上获取脚本,而是在像/dev/fd/63
这样的文件中获取脚本,并将其文件名作为命令行参数。
尝试此操作以查看评估结果:
echo node <(flow-remove-types index.js)
然后它可能会尝试在node_modules
中找到/dev/fd
目录,但它不存在。
也许运行这样的东西会有所帮助:
NODE_PATH=`pwd`/node_modules node <(flow-remove-types index.js)
我无法测试它因为我跑步:
node <(cat app.js)
即使app.js
不需要任何模块,也不起作用。