この問題を示すために作成されたリポジトリは次のとおりです。
brianmhunt/karma-rollup-preprocessor-issue-3
Karma-rollup -preprocessor を Karma の組み込みウォッチで動作させようとしています。つまり、showpad/karma-rollup-preprocessor#3 を解決します。
つまり、プリプロセッサで、Karma のウォッチ リストにファイルを追加したいと考えています。
Rollup がコンパイルに使用するファイルのリストを取得するのは簡単です。ロールアップは、読み取ったファイル (監視したいファイル) のリストを返すため、プリプロセッサでカルマが監視するリストにファイルを追加しようとしています。
基本的に、これ(または同等の機能)をプリプロセッサに追加したい:
bundle.modules.forEach((module) => {
files.unshift({
pattern: module.id, /* The full file path, from Rollup */
watched: true,
included: false,
nocache: false,
served: false,
})
})
files
Karma の場所config.files
、またはfileList
監視対象のファイルを配置するために必要な場所はどこですか。
で上記を実行するconfig.files
と、ファイルは確かにウォッチャーに追加されてい.on(fileList.changeFile)
ますが、_isIncluded
.
そのため、ファイルも (または代わりに) に追加する必要があるようfileList
です。
残念ながら、 を に追加しようとするとfileList
、$inject
エラーが発生します。
エラー: 循環依存を解決できません! (解決: preprocess -> preprocessor:rollup -> fileList -> preprocess)。
インクルードを追加できるように見える他のすべてのプリプロセッサを基本的に調べましたが、それを行う方法の兆候は見つかりませんでした。
Karma がプリプロセッサから監視する必要があるファイルを追加する正規の方法はありますか? または、そうでなければ、どのようにこれを行うことができますか? これは、Karma のプリプロセッサにとっては非常に便利なように思われるため、他のプリプロセッサでは文書化されておらず、明白でもなく、問題もないことは驚くべきことです。
編集 ここにいくつかの試みがあります:
config.files
監視パターンをin karma.conf
ieに追加しようとしました
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-browserify に根ざしましたが、掘り下げずに理解するには少し複雑すぎました.