I would like to create a js library with Kotlin Multiplatform (an example of which is this project, where we have a webscocket server and a js client) which I will then build as a npm package and import in my Vue project (could be any other framework).
what I managed to do with chat project is:
- build js sources with
./gradlew build - publish that via
yarn publish(setting up remote registry url ofc) - add published package to
package.jsonwith (needed to update project name to@chat/clientby hand in the generated package.json):
{
"name": "@chat/client",
"version": "0.0.1",
"private": false,
"workspaces": [
"packages/chat-frontend",
"packages/chat-frontend-test",
"packages_imported/kotlin/1.6.21",
"packages_imported/ktor-ktor-client-core-js-ir/2.0.0",
"packages_imported/kotlin-test-js-runner/1.6.21"
],
"resolutions": {},
"devDependencies": {},
"dependencies": {},
"peerDependencies": {},
"optionalDependencies": {},
"bundledDependencies": []
}
- added
@JsExportannotation onwriteMessagein src/frontendMain/kotlin/main.kt
what I didn't manage is (in my Vue project):
- import
writeMessage, I exported in .kt file (it's visible in source, not exported though) - import anything via
import * from '@chat/client' - or any other folder along
'@chat/client/*' - use the generated files in any other way
The generated package structure is very odd:
~ ls build/js/*
build/js/package.json build/js/yarn.lock
build/js/node_modules:
... (npm dependencies from Kotlin/JS module)
build/js/packages:
chat-frontend chat-frontend-test
build/js/packages_imported:
... (Kotlin/JS dependencies)
~ ls build/js/packages/chat-frontend/*
build/js/packages/chat-frontend/package.json build/js/packages/chat-frontend/webpack.config.js
build/js/packages/chat-frontend/kotlin:
chat-frontend chat-frontend.js chat-frontend.js.map chat-frontend.meta.js
(chat-frontend contains package dir tree and a file frontend.kjsm)
build/js/packages/chat-frontend/kotlin-dce:
chat-frontend.js
ktor-*.js
kotlinx-*.js
... (compiler output ???)
build/js/packages/chat-frontend/node_modules:
... (webpack cli and dev-server files)
Do you have any clues, tips or an example project which does that? I've processed whole section of Kotlin/JS docs but there is no information on how to import Kotlin generated .js files in a js/ts project.
EDIT:
I've updated my fork of ktor-samples with Kotlin/JS build files: build-js folder and src/backendMain/resources/chat.js. Here's the link to chat folder of the fork project
npm install <PATH>where PATH is the generated JS files from your kotlin project. It would be the PATH to build folder wherejsandmapfile resides. In your case above, it would be PATH to thatbuild/js/packages/chat-frontend/kotlin.jsfile? Want to see how the export name looks like. You would need to import the exported name likeimport chatlib from chat/client. then tryconsole.log(chatlib)and see if you see the reference. herechatlibor whatever the exported name is something you would find in your generatedjsfile.