首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将静态映射文件作为nodeJS模块的一部分?

如何将静态映射文件作为nodeJS模块的一部分?
EN

Stack Overflow用户
提问于 2016-10-05 00:04:34
回答 1查看 70关注 0票数 0

假设我有一个nodeJS模块,其index.js如下所示

代码语言:javascript
运行
复制
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];
        }
    };
};

现在,如果我在本地测试的话,一切都很好。但是,当我在另一个项目中安装这个模块时,会出现以下错误。

代码语言:javascript
运行
复制
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模块的一部分?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,因为它不在调用脚本所在的目录中。

解决这个问题有两种方法,第一种是我认为最聪明的方法。

  1. 不要分发input.csv-file。这是构建模块的一种非常糟糕的方法,您应该更改代码,以便模块接受它加载的.csv-file的路径。然而,您的模块可能需要静态数据,但在这些情况下,只将其转换为JavaScript对象并直接包含它就更明智了。
  2. 只需更改一行代码, 来自CSV_FILE = "./input.csv" 转到CSV_FILE = __dirname + "/input.csv"

请参阅__dirname

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39863526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档