Dan*_*eld 109 command-line node.js npm
我正在创建一个节点命令行界面.它全局安装并使用bin文件执行.
我计划在我正在处理的文件的根目录下打开一个命令窗口,然后运行该命令,但是我无法确定当前工作目录,因为process.cwd()它返回了节点包的目录.我最初假设,因为代码是使用批处理文件作为包装器执行的(这是bin文件在开始时没有节点就可以执行的方式),所以这是不可能的,但是咖啡脚本设法做到了.我看了一下咖啡脚本来源,但无法遵循它(没有足够的经验).
要自己测试它,请使用此package.json文件创建一个包:
{
"name": "test-package",
"version": "1.0.0",
"bin": {
"test-package": "./bin/test-package"
},
"main": "/lib/test"
}
Run Code Online (Sandbox Code Playgroud)
bin中的这个测试包文件:
#!/usr/bin/env node
var path = require('path');
var fs = require('fs');
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Run Code Online (Sandbox Code Playgroud)
任何人都可以对此有所了解.
然后尝试获取lib/test中的命令行目录.
Vad*_*hev 181
process.cwd() 返回已执行命令的目录(不是节点包的目录),如果它尚未被应用程序内的'process.chdir'更改.__filename 返回放置它的文件的绝对路径.__dirname返回目录的绝对路径__filename.如果需要从模块目录加载文件,则需要使用相对路径.
require('../lib/test');
Run Code Online (Sandbox Code Playgroud)
代替
var lib = path.join(path.dirname(fs.realpathSync(__filename)), '../lib');
require(lib + '/test');
Run Code Online (Sandbox Code Playgroud)
它总是相对于它调用的文件,并且不依赖于当前的工作目录.
sup*_*ary 38
要获取当前工作目录,您可以使用:
process.cwd()
Run Code Online (Sandbox Code Playgroud)
但是,请注意,某些脚本(尤其是gulp)将更改当前工作目录process.chdir().
您可以使用以下命令获取当前模块的路径:
__filename__dirname如果从命令行运行脚本,并且您想要运行脚本的原始目录,则无论脚本当前在哪个目录中运行,您都可以使用:
process.env.INIT_CWD
Run Code Online (Sandbox Code Playgroud)
有时需要在当前目录中运行NPM脚本,而不是项目的根目录.
此变量在npm包脚本中可用,如下所示:
$INIT_CWD.
Run Code Online (Sandbox Code Playgroud)
您必须运行最新版本的NPM.如果此变量不可用,请确保NPM是最新的.
这将允许您访问package.json中的当前路径,例如:
scripts: {
"customScript": "gulp customScript --path $INIT_CWD"
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93939 次 |
| 最近记录: |