如何将 css 添加到 Kotlin JS 项目?

vby*_*ehi 8 gradle kotlin kotlin-js

我使用 IntelliJ 中的向导创建了一个新的 Kotlin/JS Gradle 项目。

我不清楚我应该如何添加css到该项目中。该文档解释了如何启用csswebpack 支持,但实际上并没有说明如何将css文件添加到项目中(即如何使用该文件)。

例如,在普通项目中,您只需将其导入到 javascript 文件中。既然我是用 Kotlin 写的,那我现在该怎么做呢?

小智 11

当前的文档对此不是很精确。其实有两种情况:

从现有包导入 CSS

您可以使用 require() 函数轻松地从其他 Node 模块导入 CSS 文件:

import kotlinext.js.require
import kotlinx.browser.document
import react.dom.h1
import react.dom.render

fun main() {
    require("bootstrap/dist/css/bootstrap.css")
    render(document.getElementById("root")) {
        h1 { +"Hello"}
    }
}
Run Code Online (Sandbox Code Playgroud)

为此,您需要cssSupport.enabled = true在 Gradle 构建中指定,就像文档中所述。以这种方式导入的 CSS 将由 Webpack 处理。

将您自己的 CSS 合并到 Webpack 构建中

现在看来这有点棘手。默认情况下,KotlinJS 插件不会将任何资源复制到 Webpack 的构建目录 ( build/js/packages/<project_name>),而且我没有找到任何明显的配置选项。要解决这个问题,你必须告诉 Webpack 在哪里可以找到你的样式:

在项目的根目录中创建webpack.conf.d目录并放入一些包含以下内容的 JS 文件:

config.resolve.modules.push("<your_stylesheet_dir>");

该配置将由 KotlinJS 插件获取并合并到生成的build/js/packages/<project_name>/webpack.config.js. 使用此配置,您可以require()像上面的示例一样项目样式。文档中提到了这一点。

或者,您可以调整 Gradle 构建,以便它将样式表复制到 Webpack 的构建目录中:

task("copyStylesheets", Copy::class) {
    from(kotlin.sourceSets["main"].resources) {
        include("styles/**")
    }
    into("${rootProject.buildDir}/js/packages/${kotlin.js().moduleName}")
    // kotlin { js { moduleName = "xyz" }} has to be set for this to work 
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinJsDce::class) {
    dependsOn("copyStylesheets")
}
Run Code Online (Sandbox Code Playgroud)