Создайте пакет NPM, который упаковывает большой двоичный объект данных

Цель

Чтобы создать пакет npm,

  • экспортирует одну константу, data которая представляет собой массив объектов JS, например.
const export data = [{a:1, b:2}, {a:3, b:4}];
  • работает в браузере и Node (но если можно только в одном, предпочитаю браузер);
  • является минимальным размером.

Что я пробовал

У меня есть работающая реализация Node, которая собирается с помощью Parcel. Он упаковывает файл данных (.csv) и index.js, который считывает (используя d3) и анализирует (используя fs) csv во время выполнения в константную переменную data. Это отлично работает в Node.

Проблема

Связанная версия не работает из-за зависимости от fs, который предназначен только для Node. Итак, я хотел бы знать:

  1. есть ли подходящая альтернатива fs, которая удобна для браузера (я не мог понять это);
  2. существует ли лучший и, безусловно, более простой способ упаковать блок непротиворечивых данных, подобный этому. Такое ощущение, что я заново изобретаю много колес с ненужной болью.
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо того, чтобы помещать CSV в файл .csv, вы можете экспортировать строку из другого файла JS, например. data.js:

export default `[paste csv here]`

Затем просто импортируйте его и используйте этот файл:

import csv from "./data"

Это хорошо, потому что после объединения CSV находится в том же файле, но не загромождает ваш код.

В качестве альтернативы я нашел пакет npm, который представляет собой плагин для посылок, который может сделать это за вас: https://www.npmjs.com/package/parcel-transformer-csv

Parcel или другие упаковщики для этого являются полным излишеством. Все, что вам нужно, это небольшой скрипт, который выполняет следующие шаги:

  • Прочитайте CSV, используя парсер csv, в нужную вам структуру.
  • Напишите файл в текущем каталоге index.js, используя что-то вроде:
fs.writeFileSync('./index.js', `export const data = ${JSON.stringify(myData)};`):

И затем важная часть заключается в том, что вы делаете это во время сборки, прежде чем опубликовать пакет. Опубликованному пакету нужен только сгенерированный файл, а не csv или скрипты сборки или какие-либо зависимости.

Разве необходимость не зависеть от fs (указанного в ОП) не исключает этого?

Robert Harvey 04.04.2023 20:42

@RobertHarvey нет, потому что это происходит только во время сборки, а не во время выполнения. Это означает, что код запускается только при создании npm .tgz , но когда кто-либо использует пакет, нет ни fs, ни csv.

Evert 04.04.2023 20:58

У меня такое ощущение, что импорт файла CSV - не единственная причина, по которой OP использует Parcel?

code 05.04.2023 02:00

@код возможен! но звучало так, как будто это был единственный экспорт в этом пакете, и даже в этом случае это, вероятно, самое чистое решение.

Evert 05.04.2023 07:12

Другие вопросы по теме