我想为正在创建的Sapper应用程序中的所有代码提供运行时assert
。
已编辑:
引入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
和package.json
。
免责声明:我是Svelte和Sapper的新手,不知道该怎么办,在这里。我的目标不仅是使它正常工作,而且要弄清楚出了什么问题(例如,了解Sapper / Svelte打包机制)。
<罢工> 原始说明:
这应该很简单。定义全局高点(应用可以import
require
或assert
放置并可用)。实际上,我还是很困惑。
我已经考虑过直接设置window.assert
(有点苛刻吗?)并将该值作为参数传递给实际需要它的那些组件(但是参数传递看起来很困难)。
这是一种依赖项注入的情况,我希望有一个 assert
,而较低的代码无关紧要,这很令人讨厌。
注意:console.assert
不会这样做,因为它只会打印出消息。 Chrome浏览器提供了使其崩溃的选项。我可能会考虑。
答案 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,则有很多不同。