【问题标题】:Error parsing triggers: Cannot find module 'csv-parse/sync'错误解析触发器:找不到模块 'csv-parse/sync'
【发布时间】:2022-06-27 19:41:30
【问题描述】:

我正在使用 Firebase 函数来构建解析 CSV 文件的 API。

当我尝试使用 csv-parse/sync 而不是 csv-parse 时,我部署到 Firebase 函数失败并出现以下错误:

Error: Error parsing triggers: Cannot find module 'csv-parse/sync''
Require stack:
- /Users/xxx/Programming/xxx/Firebase Functions/xxx/functions/lib/index.js
- /usr/local/lib/node_modules/firebase-tools/lib/deploy/functions/runtimes/node/triggerParser.js

Try running "npm install" in your functions directory before deploying.

我已使用:

import { parse } from 'csv-parse/sync';

然后在这样的代码中使用:

interface EventData {
    update: string;
    id: string;
    title: string;
    description: string;
    category: string;
    ages: string;
    place: string;
    placeCoordinate: string;
    startDate: string;
    startTime: string;
    length: string;
    url: string;
    arrName: string;
  }

let events: Array<EventData> = []
const headers = ["update", "id", "title", "description", "ages", "place", "placeCoordinate", "startDate", "startTime", "length", "url", "arrEpost", "arrName", "validated", "skugg"]
try {
    events = parse(text, {columns: headers, from: 6, quote: "\"", delimiter: ";", ltrim: true, rtrim: true})
}...

我已经通过转到 /functions-folder 并运行来安装

npm install --save csv-parse

在根文件夹中部署

firebase deploy

这是框架、firebase 的问题还是我做错了什么?正常使用没有同步的“csv-parse”就可以了。在这两种情况下,它似乎都可以在 Visual Studio Code 中很好地导入,但在使用“同步”部署时却不行。我曾尝试清理 node_modules 文件夹,重建 package-lock.json 文件,升级到最新版本的 firebase 工具,均未成功。

我在框架项目问题页面添加了一个类似的问题:https://github.com/adaltas/node-csv/issues/323

【问题讨论】:

  • 请提供以下信息: - package.json engines.nodescripts.build - tsconfig.json targetmodule - firebase.json functions.predeploy
  • 你能告诉我们你正在使用哪个版本的nodejs以及安装了哪个版本的csv-parse?

标签: node.js typescript google-cloud-functions firebase-cli


【解决方案1】:

如果你使用 Typescript,你可以这样做

import  parse  from 'csv-parse/sync';

import  {parse}  from 'csv-parse/lib/sync';

【讨论】:

  • 在 JS 中本地导入 csv-parse/sync 时遇到类似问题,第二个选项对我有用。
  • 这不在文档中,但我认为这是最好的解决方案。
  • 第二个选项也适用于我(使用 Typescript),但谁能解释一下为什么它有效,我应该怎么知道??
【解决方案2】:

对我来说,两者中的任何一个都在 node.js (基于 Jeff Paredes 答案)

import parse from 'csv-parse/lib/sync';
const parse = require('csv-parse/lib/sync');

node_modules 文件夹中的文件夹结构似乎已更改。所以sync.js 不是位于csv-parse,而是现在位于csv-parse/lib

【讨论】:

    猜你喜欢
    • 2017-11-03
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2019-03-10
    相关资源
    最近更新 更多