假设我有一个node {{{}}如下
的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];
}
};
};
是否可以将静态映射文件作为nodeJS模块的一部分包含在模块初始化中?
答案 0 :(得分:1)
您的问题就在这一行CSV_FILE = "./input.csv"
。它在本地工作,因为您执行的脚本(index.js
)与input.csv
- 文件位于同一目录中。但是,当您将其作为依赖项安装时,input.csv
- 文件实际上位于./node_modules/your-module/input.csv
中的某个位置,因此您的新 index.js
无法看到任何内容./input.csv
- 文件,因为它与调用脚本不在同一目录中。
有两种方法可以解决这个问题,第一种方法是我认为最聪明。
不要分发input.csv
- 文件。这是构建模块的一种非常糟糕的方法,您应该更改代码,以便模块接受其加载的.csv
文件的路径。但是,您的模块可能需要静态数据,但在这些情况下,只需将其转换为JavaScript对象并直接包含它就更明智。
只需更改一行代码,
来自CSV_FILE = "./input.csv"
到CSV_FILE = __dirname + "/input.csv"