В функции Firebase: «Не удается найти модуль« xlsx »» - PullRequest
0 голосов
/ 12 марта 2020

Я пытаюсь прочитать файл Excel в функции firebase. Я решил использовать библиотеку «xlsx» ( ссылка ). Я установил библиотеку с npm install xlsx, которая работала нормально, а также добавил библиотеку в мой пакет. json зависимости как "xlsx": "^0.15.5". Мне требуется модуль в моей функции firebase с const XLSX = require('xlsx');, но затем я получаю следующую ошибку:

Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'xlsx'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/index.js:21:14)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

Любая помощь, чтобы заставить это работать?


Редактирование для ясности. Спасибо за вопрос. Вот посылка. json. Вы заметите строку, которую я упоминал ранее, в списке зависимостей.

{
  "name": "------",
  "version": "----",
  "private": true,
  "dependencies": {
    "@google-cloud/storage": "^4.5.0",
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.4.1",
    "@testing-library/user-event": "^7.2.1",
    "firebase": "^7.9.1",
    "react": "^16.12.0",
    "react-dom": "^16.12.0",
    "react-firebaseui": "^4.1.0",
    "react-scripts": "3.4.0",
    "xlsx": "^0.15.5"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

А вот код, который не работает:

const path = require('path');
const os = require('os');
const xlsx = require('xlsx');

exports.refreshRightFile = functions.storage.object().onFinalize(async (object) => {
  const fileBucket = object.bucket; // The Storage bucket that contains the file.
  const filePath = object.name; // File path in the bucket.
  const contentType = object.contentType; // File content type.
  const metageneration = object.metageneration; // Number of times metadata has been generated. New objects have a value of 1.
  // Get the file name.
  const fileName = path.basename(filePath);

  // Exit if this is triggered on any file except CourseMaster.xlsx
  if (fileName !== 'right_file.xlsx') {
    return console.log('This is not the right file.');
  } else {
    console.log('The right file has changed.');
  }

  // Download file from bucket.
  const bucket = admin.storage().bucket(fileBucket);
  const tempFilePath = path.join(os.tmpdir(), fileName);
  const metadata = {
    contentType: contentType,
  };
  await bucket.file(filePath).download({destination: tempFilePath});
  console.log('The right file has downloaded locally to', tempFilePath);
  courseMasterWorkbook = xlsx.readfile(tempFilePath);
  console.log(xlsx.utils.sheet_to_json(courseMasterWorkbook.Sheets['Sheet1']))
});

1 Ответ

0 голосов
/ 16 марта 2020

Руководствуясь комментарием @Renaud Tarne c, я заметил, что в папке функций есть отдельный пакет. json. Это отсутствовало зависимость xlsx. Я добавил это, и все работает отлично! Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...