Машинопись: SyntaxError: Неожиданный экспорт токена - PullRequest
1 голос
/ 27 мая 2020

В моем проекте React мне нужно разделить модели (интерфейсы машинописного текста в моем случае) между 3 проектами машинописного текста. Поэтому я выбрал bit.env и импортировал все свои модели в https://bit.dev/model/index/~code, и все в порядке.

Затем мне нужно было проверить поля в моей модели, поэтому я добавил служебные функции в https://bit.dev/model/index/~code#util .ts и развернул то же самое в bit.env

Я столкнулся со следующей ошибкой, когда попытался использовать эту вспомогательную функцию в своем проекте № 2 (место, где я храню облако firebase функций).

/Users/vinoth.gopu/Documents/mine/oss/Cloud/functions/node_modules/@bit/model.index/dist/index.js:1
export * from './admin';
^^^^^^

SyntaxError: Unexpected token 'export'
    at wrapSafe (internal/modules/cjs/loader.js:1101:16)
    at Module._compile (internal/modules/cjs/loader.js:1149:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1205:10)

Мой код в проекте # 2

export const placeOrder = functions
    .runWith({
        memory:'256MB'
    })
    .region(cloudConfig.firebase.region)
    .firestore
    .document('Orders/{OrderId}')
    .onCreate((snap, context) => {
        const orderDetails = snap.data() as UserOrders;

        try {
            //check if all fields of interface implemented
            if(isOrder(orderDetails)) { // PROBLEM HERE
                 //do something
            }

Как указано в приведенном выше коде, я могу использовать все интерфейсы из этого модельного проекта, но сообщение об ошибке вспомогательной функции.

Я сослался на эти статьи и ссылки

  1. Получение неожиданного экспорта токена
  2. https://medium.com/the-node-js-collection/an-update-on-es6-modules-in-node-js-42c958b890c

Но ни один из них, похоже, не работает (также я был немного смущен, какой проект нуждается в общей модели транспиляции или Project # 2 в моем случае?). Я понимаю, что это какая-то проблема с узлом, где он не может распознать модуль ES6 и требует какой-то промежуточной транспиляции. Но мне интересно, как все интерфейсы с похожим оператором export работают очень хорошо. Я хотел бы понять, что мне здесь не хватает.

Ответы [ 3 ]

1 голос
/ 01 июня 2020

Кажется, ответ лежит в bit.dev

"bit": {
    "env": {
      "compiler": {
        "bit.envs/compilers/react-typescript@3.1.52": {
          "rawConfig": {
            "tsconfig": {
              "compilerOptions": {
                "target": "ES5",
                "module": "CommonJS"
              }
            }
          }
        }
      }
    },
    "componentsDefaultDirectory": "src/{name}",
    "packageManager": "npm"
  },

Моя проблема решена, позаботившись о транспиляции.

0 голосов
/ 30 мая 2020

На днях я столкнулся с проблемой, аналогичной этой, с v3.9.x. Попробуйте перейти на Typescript v3.8.x, а также для своих проектов убедитесь, что вы запустили npm install -D typescript@3.8, чтобы убедиться, что они собирают правильную версию в будущем, пока не будет исправлено исправление для 3.9.x. Я думаю, что в транспиляторе v3.9.x есть ошибка, потому что он включает реэкспортированные интерфейсы и другие типы, которые не должны быть включены в вывод javascript при реэкспорте.

0 голосов
/ 27 мая 2020

NodeJS по умолчанию использует общий способ загрузки пакетов JS. С более новой версией NodeJS вы получаете функциональность модуля JavaScript, используя файлы .mjs или сообщая движку, что проект является модульным проектом .

Я не Не знаю, использует ли FireBase последние версии Node, но это должно хотя бы объяснить, почему вы видите эту ошибку. JS получил поддержку экспорта спустя много времени после того, как NodeJS уже начал оборачивать вещи в Common JS, поэтому реализовать это было такой проблемой. Поддержка устаревших версий почти всегда болезненна. необходимо для экспортируемых функций, но не для экспортируемых интерфейсов, потому что интерфейс, скомпилированный в JS из TS, ... ничего. Буквально ничего. JS не имеет системы типизации, и поэтому, когда TS компилируется, все, что не нужно, разрешается исключать из компиляции для цели JS.

...