'Error parsing triggers: Cannot find module 'csv-parse/sync'

I am using Firebase functions to build an API that parses CSV files.

When I try to use csv-parse/sync instead of csv-parse, my deploy to Firebase Functions fail with the following error:

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.

I have imported using:

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

Then use in code like this:

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})
}...

I have installed by going to /functions-folder and running

npm install --save csv-parse

Deploying in root folder with

firebase deploy

Is this an issue with the framework, with firebase or am I doing something wrong? Normal use of "csv-parse" without sync works just fine. In both cases it seems to import just fine in Visual Studio Code, but not when deploying with "sync". I have tried to clean the node_modules folder, rebuild the package-lock.json-file, upgraded to the latest version of firebase tools, all without success.

I have added a similar question on the framework project issues page: https://github.com/adaltas/node-csv/issues/323



Solution 1:[1]

If you are using Typescript you can do

import  parse  from 'csv-parse/sync';

or

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

Solution 2:[2]

For me either of the two worked in node.js (based on Jeff Paredes answer):

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

It seems like the folder structure within the node modules folder was changed. So instead of sync.js being located in csv-parse it is now in csv-parse/lib.

enter image description here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jeff Paredes
Solution 2 Tobi Obeck