假设我有一个nodeJS模块,其index.js如下所示
module.exports = function() {
var map = {},
CSV_FILE = "./input.csv",
_loadCSV = function() {
var fs = require('fs'),
parse = require('csv-parse'),
rawCSVData = fs.readFileSync(CSV_FILE).toString(),
i,
item;
parse(rawCSVData, {columns: true}, function(err, data) {
for (i = 0; i < data.length; i++) {
item = data[i];
map[item.key] = item.value;
}
});
},
_init = function() {
_loadCSV();
};
// Init
_init();
// Public
return {
/**
* getValue
*/
getValue: function(key) {
return map[key];
}
};
};现在,如果我在本地测试的话,一切都很好。但是,当我在另一个项目中安装这个模块时,会出现以下错误。
fs.js:549 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
^
Error: ENOENT: no such file or directory, open 'input.csv' at Error (native)是否可以将静态映射文件作为用于模块初始化的nodeJS模块的一部分?
发布于 2016-10-05 00:18:31
您的问题是这行CSV_FILE = "./input.csv"。它在本地工作,因为您正在执行的脚本(index.js)与input.csv-file位于同一个目录中。但是,当您将其作为依赖项安装时,input.csv-file实际上位于./node_modules/your-module/input.csv中的某个位置,因此您的新index.js无法看到任何./input.csv-file,因为它不在调用脚本所在的目录中。
解决这个问题有两种方法,第一种是我认为最聪明的方法。
input.csv-file。这是构建模块的一种非常糟糕的方法,您应该更改代码,以便模块接受它加载的.csv-file的路径。然而,您的模块可能需要静态数据,但在这些情况下,只将其转换为JavaScript对象并直接包含它就更明智了。CSV_FILE = "./input.csv"
转到CSV_FILE = __dirname + "/input.csv"请参阅__dirname
https://stackoverflow.com/questions/39863526
复制相似问题