我正在创建一个应用程序可以导入的节点模块(通过npm install)。我的模块中的函数将接受在用户中设置的.json文件的位置。申请(由下面filePath
指定):
...
function (filePath){
messages = jsonfile.readFileSync(filePath);
}
...
我如何允许我的函数接受这个文件路径并以我的模块能够找到它的方式处理它,因为我的函数永远不知道用户在哪里'应用程序文件将被存储?
答案 0 :(得分:1)
如果您正在编写节点库,那么您的模块将由用户的应用程序require
dd保存在node_modules
文件夹中。需要注意的是,您的代码只是在用户的应用程序中运行代码,因此路径将相对于用户的应用程序。
例如:让我们创建两个模块echo-file
和user-app
,将自己的文件夹和自己的package.json
作为自己的项目。这是一个包含两个模块的简单文件夹结构。
workspace
|- echo-file
|- index.js
|- package.json
|- user-app
|- index.js
|- package.json
|- userfile.txt
echo-file
模块 workspace/echo-file/package.json
{
"name": "echo-file",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},
"author": "",
"license": "ISC"
}
workspace/echo-file/index.js
(模块的入口点)
const fs = require('fs');
// module.exports defines what your modules exposes to other modules that will use your module
module.exports = function (filePath) {
return fs.readFileSync(filePath).toString();
}
user-app
模块 NPM允许您从文件夹安装包。它会将本地项目复制到您的node_modules
文件夹中,然后用户可以require
。
初始化此npm项目后,您可以npm install --save ../echo-file
并将其作为依赖项添加到用户的应用程序中。
workspace/user-app/package.json
{
"name": "user-app",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},
"author": "",
"license": "ISC",
"dependencies": {
"echo-file": "file:///C:\\Users\\Rico\\workspace\\echo-file"
}
}
workspace/user-app/userfile.txt
hello there
workspace/user-app/index.js
const lib = require('echo-file'); // require
console.log(lib('userfile.txt')); // use module; outputs `hello there` as expected
我如何允许我的函数接受这个文件路径并以我的模块能够找到它的方式处理它,因为我的函数永远不会知道用户应用程序文件的存储位置?
长话短说:文件路径将相对于用户的应用文件夹。
当您的模块npm install
时,它会复制到node_modules
。为模块提供文件路径时,它将相对于项目。节点遵循commonJS
module definition。 EggHead also has a good tutorial就可以了。
希望这有帮助!
答案 1 :(得分:0)
如何使用绝对路径?
如果你写在yourapp/lib/index.js.
path.join(__dirname, '../../../xx.json');