Tho*_*ggi 17 path relative-path fs node.js
我有一个可执行节点/ javascript脚本,它有一个调试布尔值,如果设置为true,将写入几个文件.此可执行文件也是节点模块.根据运行脚本的用户的工作目录,似乎该函数找不到要将文件写入的目录.
该模块的结构如下
output/
lib/
helpers.js
index.js
Run Code Online (Sandbox Code Playgroud)
我最初的推理是拥有这条道路.
helper.write = function(data,filename){
if(typeof data !== "string") data = JSON.stringify(data);
fs.writeFileSync("./output/"+filename, data);
};
Run Code Online (Sandbox Code Playgroud)
但是,这在node_module文件夹中运行脚本时有效
fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data);
Run Code Online (Sandbox Code Playgroud)
像这样
node ./my_app/node_modules/the_module/index.js
Run Code Online (Sandbox Code Playgroud)
如果模块在另一个使用该库的可执行文件中使用,则会更加混乱.
node ./my_app/run.js
Run Code Online (Sandbox Code Playgroud)
有没有办法独立于所有这些变量保存文件?
Dav*_*don 43
如果我正确理解了这个问题,您希望始终写入相对于当前脚本的路径.要获取当前正在执行的脚本所在目录的名称,可以这样使用__dirname:
var path = require('path');
helper.write = function(data,filename){
if(typeof data !== "string") data = JSON.stringify(data);
var file = path.join(__dirname, 'output', filename);
fs.writeFileSync(file, data);
};
Run Code Online (Sandbox Code Playgroud)
话虽这么说,我认为在您的node_modules目录中编写文件是不错的做法.我建议您的模块需要文件系统中其他位置的文件的完整路径.如果调用者希望写入其自己的项目树中的输出目录,则可以再次使用相同的__dirname技巧.
| 归档时间: |
|
| 查看次数: |
27165 次 |
| 最近记录: |