我正在尝试编写一个简单的 Node.js CLI 来更轻松地导航目录。为了简单起见,假设这是我要制作的 CLI:
测试.js
#!/usr/bin/env node
console.log('hey there');
var exec = require('child_process').exec;
exec('cd ~/code/');
包.json
{
"name": "example",
"version": "0.1.0",
"description": "Example CLI that needs to run in current context",
"bin": {
"myScript": "test.js"
},
"engines": {
"node": "0.10.*",
"npm": "1.2.*"
}
}
将它们放在同一个文件夹中,运行 npm link
将创建 CLI。之后,如果我运行 myScript
,它会输出“嘿那里”但不会更改目录。我知道这是因为 myScript 在它自己的子 shell 中运行,随后终止。我读过 here关于源运算符,发现它是这样使用的:
. filename [arguments]
我试过 。 myScript
强制我的代码在当前上下文中运行。但是,通过使用 source 运算符,代码将被解释为 bash 而不是 js。这是我得到的错误:
-bash: /Users/dallinosmun/.nvm/v0.10.21/bin/myScript: line 3: syntax error near unexpected token `('
-bash: /Users/dallinosmun/.nvm/v0.10.21/bin/myScript: line 3: `var exec = require('child_process').exec;'
那么,关于如何让 Node.js CLI 在当前上下文中运行有什么想法吗?
最佳答案
这是不可能的,因为 exec 命令启动了一个新进程。 但这是绕过问题的方法的链接:
关于node.js - 是否可以使用 source 运算符在当前上下文中运行 npm 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690877/