如何在Sapper应用程序中为每个人提供全局的“断言”?

时间:2019-12-10 20:32:50

标签: svelte rollupjs sapper

我想为正在创建的Sapper应用程序中的所有代码提供运行时assert

已编辑:

引入assert模块适用于server构建,但不适用于client构建,在浏览器中显示以下500条错误消息之一:

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

      

    Module specifier does not start with ...

    这样,客户端版本会显示警告:'assert' is imported by src/assert.js, but could not be resolved – treating it as an external dependency

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

      

    Can't find variable: require

    以此,客户端构建通过。 :/

我的rollup.config.jspackage.json

免责声明:我是Svelte和Sapper的新手,不知道该怎么办,在这里。我的目标不仅是使它正常工作,而且要弄清楚出了什么问题(例如,了解Sapper / Svelte打包机制)。


<罢工> 原始说明:

这应该很简单。定义全局高点(应用可以import requireassert放置并可用)。实际上,我还是很困惑。

我已经考虑过直接设置window.assert(有点苛刻吗?)并将该值作为参数传递给实际需要它的那些组件(但是参数传递看起来很困难)。

这是一种依赖项注入的情况,我希望有一个assert,而较低的代码无关紧要,这很令人讨厌。

注意:console.assert不会这样做,因为它只会打印出消息。 Chrome浏览器提供了使其崩溃的选项。我可能会考虑。

2 个答案:

答案 0 :(得分:1)

服务器端

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>

答案 1 :(得分:0)

我从Sapper转到svelte-filerouter,问题消失了。?以下是详细信息(如果适用于您,请发表评论)。

.svelte.js文件中:

import { assert } from 'assert';

rollup.config.js中:

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

我根据rollup-plugin-node-resolve的{​​{3}}来构图。


我不知道为什么我在Sapper中得到的500消失了。如果以Sapper为基础而不是Svelte,则有很多不同。