Доступ к файлу с относительным путем (предыдущие папки) в node.js

#javascript #node.js

#javascript #node.js

Вопрос:

У меня есть папка, в которой хранится файл JSON моей базы данных Firebase, у меня есть файл .bat в Windows, который сразу загружает базы данных. Теперь я хочу дублировать его на MAC.

Это иерархия папок:

  • package-lock.json
  • node_modules (папка)
  • ИМЯ_ИГРЫ (папки)
    • config.js
    • ServiceAccount.json
    • Dev (папка)
      • import_data.js
      • upload.sh -> Этот файл, который я запускаю
      • данные (папка)
        • Данные-worldwide.json

При запуске upload.sh:

 #! /bin/bash
node import_data.js
 

import_data.js:

 // Imports
const firestoreService = require('....node_modulesfirestore-export-import');
const firebaseConfig = require('..config.js');
const serviceAccount = require('..serviceAccount.json');

// JSON To Firestore
const jsonToFirestore = async () => {
  try {
    console.log('Initialzing Firebase');
    await firestoreService.initializeApp(serviceAccount, firebaseConfig.databaseURL);
    console.log('Firebase Initialized');

    await firestoreService.restore('./data/Data-worldwide.json');
    console.log('Upload Success');
  }
  catch (error) {
    console.log(error);
  }
};

jsonToFirestore();
 

Я продолжаю получать эту ошибку:

 xxxxxx@164 Dev % ./upload.sh
internal/modules/cjs/loader.js:651
    throw err;
    ^

Error: Cannot find module '....
ode_modules
           irestore-export-import'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:649:15)
    at Function.Module._load (internal/modules/cjs/loader.js:575:25)
    at Module.require (internal/modules/cjs/loader.js:705:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/Users/xxxx/Dropbox/JSON Databases/GAME_NAME/Dev/import_data.js:2:26)
    at Module._compile (internal/modules/cjs/loader.js:799:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:810:10)
    at Module.load (internal/modules/cjs/loader.js:666:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
    at Function.Module._load (internal/modules/cjs/loader.js:598:3)
internal/modules/cjs/loader.js:651
    throw err;
    ^

Error: Cannot find module '....
ode_modules
           irestore-export-import'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:649:15)
    at Function.Module._load (internal/modules/cjs/loader.js:575:25)
    at Module.require (internal/modules/cjs/loader.js:705:19)
    at require (internal/modules/cjs/helpers.js:14:16)
    at Object.<anonymous> (/Users/xxxx/Dropbox/JSON Databases/GAME_NAME/Dev/import_data.js:2:26)
    at Module._compile (internal/modules/cjs/loader.js:799:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:810:10)
    at Module.load (internal/modules/cjs/loader.js:666:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:606:12)
    at Function.Module._load (internal/modules/cjs/loader.js:598:3)
 

Комментарии:

1. require('firestore-export-import') должно быть достаточно. Установлен ли модуль?

2. Что вы подразумеваете под «установленным»? Я только что скопировал его из папки Windows.

Ответ №1:

В строковых литералах JavaScript a является управляющим символом.

Чтобы иметь литерал в строке, вам нужно его экранировать: \ … но Node.js обычно использует разделители каталогов в стиле UNIX ( / ), а не Windows, в любом случае.