webpack - Karma 无法解决 kot​​lin-frontend-plugin 中的依赖项 'kotlin'

标签 webpack karma-runner kotlin karma-webpack

我一直试图让它工作一天左右,但没有运气。 Webpack 似乎没有注入(inject) kotlin npm 模块到我的测试中,即使它是由 webpack 加载的。所以它抛出下面的错误说它找不到它。

这是错误日志:

                          Asset     Size  Chunks         Chunk Names
                           main  1.55 MB       0  [big]  main
classes/java/test/vuekt_test.js  1.37 MB       1  [big]  classes/java/test/vuekt_test.js
chunk    {0} main (main) 1.55 MB [entry]
    [0] ./~/process/browser.js 5.42 kB {0} {1}
    [1] ./~/kotlin/kotlin.js 1.31 MB {0} {1}
    [2] ./js/kitchensink/kotlin/MyComponent.html 2.59 kB {0} {1}
    [3] ./js/kitchensink/kotlin/VueApp.html 725 bytes {0} {1}
    [4] ./~/vue/dist/vue.runtime.esm.js 187 kB {0}
    [5] ./js/vuekt.js 40 kB {0}
    [6] (webpack)/buildin/global.js 509 bytes {0}
chunk    {1} classes/java/test/vuekt_test.js (classes/java/test/vuekt_test.js) 1.36 MB [entry]
    [0] ./~/process/browser.js 5.42 kB {0} {1}
    [1] ./~/kotlin/kotlin.js 1.31 MB {0} {1}
    [2] ./js/kitchensink/kotlin/MyComponent.html 2.59 kB {0} {1}
    [3] ./js/kitchensink/kotlin/VueApp.html 725 bytes {0} {1}
    [7] ./classes/java/test/vuekt_test.js 40.6 kB {1} [built]
webpack: Compiled successfully.
webpack: Compiling...
30 06 2017 08:36:42.464:INFO [PhantomJS 2.1.1 (Windows 7 0.0.0)]: Connected on socket RaGM1IMTAMuV2JRuAAAA with id 80698172
PhantomJS 2.1.1 (Windows 7 0.0.0) ERROR
  Error: Error loading module 'vuekt_test'. Its dependency 'kotlin' was not found. Please, check whether 'kotlin' is loaded prior to 'vuekt_test'.
  at classes/java/test/vuekt_test.js:35113

正如您在日志中看到的 [1] ./~/kotlin/kotlin.js 1.31 MB {0} {1} 行, kotlin-stdlib-js 资源正在被 webpack 加载。

它也包含在 main 中您可以看到的捆绑包已加载到此行
main  1.55 MB       0  [big]  main

然而,它并没有被注入(inject)到 vuekt_test.js 中。 .这就是您在上面看到的错误被抛出的原因。

我不知道如何让它注入(inject) kotlin虽然进入它。

这是我在 build.gradle 中的配置:
kotlinFrontend {
    npm {
        dependency("vue", "2.3.4")

        devDependency("vue-template-compiler", "2.3.4")
        devDependency("vue-template-es2015-compiler", "1.5.2")
        devDependency("vue-template-loader", "0.3.1") //this requires the above 2 devDependencies

        devDependency("webpack", "2.6.1")
        devDependency("webpack-dev-server", "2.4.4")
        devDependency("css-loader", "0.28.4")
        devDependency("style-loader", "0.18.2")
        devDependency("to-string-loader", "1.1.5")
        devDependency("file-loader", "0.11.2")

        devDependency("karma")
    }

    webpackBundle {
        bundleName = "main"
        contentPath = file('src/web')
        port = 9002
    }

    karma {
        port = 9876
        runnerPort = 9100
        reporters = ["progress"]
        frameworks = ["qunit"]
    }
}

这是karma.conf.js文件:
var webpackConfig = require("C:\\my_workspace\\vue.kt\\build\\webpack.config.js");
webpackConfig.resolve.modules.push("C:\\my_workspace\\vue.kt\\build\\classes\\java\\test\\vuekt_test.js");

module.exports = function (config) {
config.set({
    "basePath": "C:\\my_workspace\\vue.kt\\build",
    "frameworks": [
        "qunit"
    ],
    "reporters": [
        "progress"
    ],
    "files": [
        "C:\\my_workspace\\vue.kt\\build\\classes\\java\\test\\vuekt_test.js"
    ],
    "exclude": [
        "*~",
        "*.swp",
        "*.swo"
    ],
    "port": 9876,
    "runnerPort": 9100,
    "colors": false,
    "autoWatch": true,
    "browsers": [
        "PhantomJS"
    ],
    "captureTimeout": 5000,
    "singleRun": false,
    "preprocessors": {
        "C:\\my_workspace\\vue.kt\\build\\classes\\java\\test\\vuekt_test.js": [
            "webpack"
        ]
    },
    "plugins": [
        "karma-phantomjs-launcher",
        "karma-qunit",
        "karma-webpack"
    ],
    "client": {
        "clearContext": false,
        "qunit": {
            "showUI": true,
            "testTimeout": 5000
        }
    },
    "webpack": webpackConfig
})
};

我需要做什么来解决这个问题?

最佳答案

经过一些额外的试验和错误后,我发现我需要声明应该编译测试的模块类型。

将此添加到我的 build.gradle文件修复了问题:

compileTestKotlin2Js {
    kotlinOptions.metaInfo = true
    kotlinOptions.moduleKind = 'commonjs'
}

关于webpack - Karma 无法解决 kot​​lin-frontend-plugin 中的依赖项 'kotlin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44850373/

相关文章:

android - 在 Android Studio 中为 Kotlin 模块配置 "build.gradle"

angular - Angular 6 'pdf-viewer' 的 ng2-pdf-viewer 不是已知对象

npm - 使用 webpack 时的依赖项和 devDependencies

angularjs - TeamCity : PhantomJS have not captured in 60000 ms, 查杀

angularjs - Angular mock 无法注入(inject)我的模块依赖项

java - 需要数组类型;发现: 'java.util.map<java.lang.String,java.lang.String>'

找不到 Android 绑定(bind)适配器

javascript - 如何定制基于 webpack 的应用程序或库?

Angular Ivy 编译器和 webpack

javascript - Karma 无效的配置文件