# Kotlin JavaScript Gradle Plugin: Scoped Package Name

**URL:** <https://discuss.kotlinlang.org/t/kotlin-javascript-gradle-plugin-scoped-package-name/13410>\
**Category:** JavaScript\
**Created:** [July 8, 2019, 11:02am UTC](https://discuss.kotlinlang.org/t/kotlin-javascript-gradle-plugin-scoped-package-name/13410 "2019-07-08T11:02:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![cbbaumann](https://avatars.discourse-cdn.com/v4/letter/c/ce73a5/32.png) [@cbbaumann](https://discuss.kotlinlang.org/u/cbbaumann)\
**Post date:** [July 8, 2019, 11:02am UTC](https://discuss.kotlinlang.org/t/kotlin-javascript-gradle-plugin-scoped-package-name/13410/1 "2019-07-08T11:02:20Z")

</div>

How can I set the **npm package scope** using the **kotlin-gradle-plugin**?

Looking at [PackageJson.kt](https://github.com/JetBrains/kotlin/blob/9ba7907b815780531d27fe9be0cfe3308f50111f/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PackageJson.kt#L36) in kotlin-gradle-pluing I can see that npm scoped package names seem to be supported:

```
companion object {
    fun scopedName(name: String): ScopedName = if (name.contains("/")) ScopedName(
        scope = name.substringBeforeLast("/").removePrefix("@"),
        name = name.substringAfterLast("/")
    ) else ScopedName(scope = null, name = name)

    operator fun invoke(scope: String, name: String, version: String) =
        PackageJson(ScopedName(scope, name).toString(), version)
}

```

Then in [NpmProjectVisitor.kt](https://github.com/JetBrains/kotlin/blob/9ba7907b815780531d27fe9be0cfe3308f50111f/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProjectVisitor.kt#L99) I find that the name in package.json is set by using the name of the npm project:

```
val name = npmProject.name
val packageJson = PackageJson(
        name,
        fixSemver(project.version.toString())
 )

```

And finally in [NpmProject.kt](https://github.com/JetBrains/kotlin/blob/9ba7907b815780531d27fe9be0cfe3308f50111f/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt#L74) I see how the npm project name is constructed based on the gradle project name:

```
private fun buildNpmProjectName(): String {
    val project = target.project
    val name = StringBuilder()

    name.append(project.rootProject.name)

    if (project != project.rootProject) {
        name.append("-")
        name.append(project.name)
    }

    if (target.name.isNotEmpty() && target.name.toLowerCase() != "js") {
        name.append("-").append(target.name)
    }

    if (compilation.name != KotlinCompilation.MAIN_COMPILATION_NAME) {
        name.append("-").append(compilation.name)
    }

    return name.toString()
}

```

Unfortunately it is not allowed to include slashes (‘/’) in gradle project names. So setting @myscope/myproject is not an option.

---

<div class="post-metadata">

**Author:** ![Alexey.Belkov](https://sea1.discourse-cdn.com/flex019/user_avatar/discuss.kotlinlang.org/alexey.belkov/32/5215_2.png) [@Alexey.Belkov](https://discuss.kotlinlang.org/u/Alexey.Belkov)\
**Post date:** [July 10, 2019, 7:59am UTC](https://discuss.kotlinlang.org/t/kotlin-javascript-gradle-plugin-scoped-package-name/13410/2 "2019-07-10T07:59:09Z")

</div>

Looks like this is not implemented yet, see [https://youtrack.jetbrains.com/issue/KT-25878#focus=streamItem-27-2999812.0-0](https://youtrack.jetbrains.com/issue/KT-25878#focus=streamItem-27-2999812.0-0)

---

<div class="post-metadata">

**Author:** ![marcoeckstein](https://avatars.discourse-cdn.com/v4/letter/m/87869e/32.png) [@marcoeckstein](https://discuss.kotlinlang.org/u/marcoeckstein)\
**Post date:** [December 19, 2022, 7:41pm UTC](https://discuss.kotlinlang.org/t/kotlin-javascript-gradle-plugin-scoped-package-name/13410/3 "2022-12-19T19:41:45Z")

</div>

You might want to try this workaround:

```kotlin
js(IR) {
    // ...
    compilations["main"].packageJson {
        customField("name", "@myscope/$name")
    }
}

```
