3

这是为演示该问题而创建的存储库:

briamhunt/karma-rollup-preprocessor-issue-3

我正在尝试让 karma-rollup-preprocessor 与 Karma 的内置手表一起使用,即解决showpad/karma-rollup-preprocessor#3

换句话说,在预处理器中,我想将文件添加到 Karma 的监视列表中。

很容易获得 Rollup 用于编译的文件列表。Rollup 返回它读取的文件列表(一个想要观看的文件),所以在预处理器中我试图将文件添加到列表 karma 手表。

基本上我想将这个(或等效的)添加到预处理器中:

bundle.modules.forEach((module) => {
    files.unshift({
        pattern: module.id,  /* The full file path, from Rollup */
        watched: true,
        included: false,
        nocache: false,
        served: false,
    })
})

filesKarma'sconfig.filesfileList任何需要放置正在观看的文件的地方在哪里。

使用 执行上述config.files操作,文件确实被添加到观察者中,.on(fileList.changeFile)_isIncluded.

所以看起来文件也(或替代地)必须添加到fileList.

不幸的是,当我尝试添加 时fileList$inject我收到错误:

错误:无法解决循环依赖!(解决:预处理 -> 预处理器:汇总 -> 文件列表 -> 预处理)。

我基本上查看了所有其他看起来也可以添加包含的预处理器,但我没有发现如何去做。

有没有一种规范的方法来添加 Karma 应该从预处理器中观看的文件?或者其他人怎么可能做到这一点?这对于 Karma 中的预处理器来说似乎非常重要,因此令人惊讶的是,它在其他预处理器中没有记录、不明显或有问题。

编辑 这里还有一些尝试:

我试图将观察到的模式添加到config.filesin karma.confie

files: [
   "spec/**/*.js",
   {pattern:"src/**/*.js", included: false, watched: true}
]

但是src/*更改时不会重新编译。测试只是重新运行。

所以我尝试了这样的chokidar:

var server = new karma.Server(options)...

chokidar.watch("src/**/*.js")
  .on('add', server.refreshFiles.bind(server))
  .on('change', server.refreshFiles.bind(server))

我还尝试了去抖动,以防 Karma 刷新速度较慢,但​​似乎测试不会重新运行。

我扎根于 karma-browserify 寻找灵感,但如果不深入研究,它有点太复杂了。

4

1 回答 1

0

我已发出拉取请求来解决此问题

在合并之前,可以使用我的存储库,即放入"karma-rollup-preprocessor": "brianmhunt/karma-rollup-preprocessor"依赖package.json项或 devDependencies。

编辑:由https://github.com/Kflash/karma-rollup-plugin取代

于 2016-07-06T16:16:28.787 回答