Как обеспечить глобальное «утверждение» для всех в приложении Sapper?

Я хотел бы предоставить среду выполнения assert для всего кода в приложении Sapper, которое я создаю.

Отредактировано:

Использование модуля assert работает для server сборок, но не для client сборок, показывая любую из этих 500 сообщения об ошибках в браузере:

  • import { strict as sa } from 'assert';

    Спецификатор модуля не начинается с ...

    При этом сборка клиента показывает предупреждение: 'assert' is imported by src/assert.js, but could not be resolved – treating it as an external dependency

  • const sa = require("assert").strict;

    Не удается найти переменную: требуется

    На этом сборка клиента проходит. : /

Мои rollup.config.js и _ 9_.

Отказ от ответственности: я новичок в Svelte и Sapper и понятия не имею, что здесь делать. Моя цель - не только заставить его работать, но и понять, что пошло не так (т.е. узнать о механизмах упаковки Sapper / Svelte).


Исходное описание:

Это должно быть просто. Определите глобальный максимум (приложение может import или require assert и разместить его доступным). На практике я все еще в замешательстве.

Я подумал о том, чтобы установить window.assert напрямую (немного жестко?) И передать значение в качестве параметра тем компонентам, которые действительно в нем нуждаются (но передача параметров выглядит сложной).

Это случай внедрения зависимости таким образом, как я хотел бы, чтобы был assert, а нижний код не заботится о том, какой вариант.

Примечание. console.assert не годится, потому что он только распечатывает сообщение. В Chrome есть возможность заставить его сломаться. Я могу это рассмотреть.


person akauppi    schedule 10.12.2019    source источник


Ответы (2)


Сторона сервера

Модуль assert встроен в node. Например, если вы импортируете его в src/server.js и вызовете assert(false, "whoops"), это нормально.

Сторона клиента

Поскольку версии модуля assert для браузера не существует, вам необходимо установить пакет npm assert как devDependency, а затем включите его в свой пакет.

Это делается путем импорта в src/client.js:

// src/client.js
import assert from 'assert'

....

Теперь вы можете импортировать его и в .svelte файлы:

<!-- Example.svelte -->
<script>
  import assert from assert

  assert(false, "dang it")
</script>
person joshnuss    schedule 13.12.2019
comment
Спасибо за ответ. По какой-то причине это не сработало для меня, давая 500 во время выполнения, которые я показываю выше. Но хорошо знать, что это должно сработать. - person akauppi; 15.12.2019
comment
Может попробовать в пустом саперном проекте? - person joshnuss; 16.12.2019
comment
Конечно, я мог / может быть, сделал. Однако главным прорывом стала проблема rollup-plugin-node-resolve, на которую я ссылался ниже. Это не самая большая гордость из моих проблем с SO, но я сохраню ее. Может быть, однажды это кому-то поможет. - person akauppi; 16.12.2019

Я перешел с Sapper на svelte-filerouter, и проблемы исчезли. Подробности (прокомментируйте, если это работает для вас).

В .svelte или .js файлах:

import { assert } from 'assert';

In rollup.config.js:

...
   plugins: [
      resolve( {
         preferBuiltins: true,
         mainFields: ['browser'],
         dedupe: importee => importee === 'svelte' || importee.startsWith('svelte/')
      })
   ]

Я сформулировал это на основе этой проблемы из rollup-plugin-node-resolve.


Я не знаю, почему те 500, которые я получил в Sapper, теперь исчезли. Многое отличается, если использовать Sapper в качестве основы, а не просто Svelte.

person akauppi    schedule 15.12.2019