Edoardo Luppi
11/24/2023, 4:57 PMArtem Kobzar
11/24/2023, 5:38 PMuseEsModules
inside your js
block inside the build.gradle
fileArtem Kobzar
11/24/2023, 5:38 PMArtem Kobzar
11/24/2023, 5:39 PMArtem Kobzar
11/24/2023, 5:39 PMArtem Kobzar
11/24/2023, 5:39 PMEdoardo Luppi
11/24/2023, 5:43 PMpackage.json
into the output folder
At this point the result package layout is as per screenshot.
Each file has a export default class
3. at this point, how am I supposed to import those classes into my Kotlin module using externals?Edoardo Luppi
11/24/2023, 5:49 PMjsMain {
dependencies {
implementation(npm("antlr4", "4.13.1-patch-1"))
val pathToLocalNpmModule = rootProject.layout.projectDirectory.dir("generated-packages/${project.name}-js")
val canonicalPath = pathToLocalNpmModule.asFile.canonicalPath
implementation(npm("parsers-js", "file:$canonicalPath"))
}
}
Artem Kobzar
11/24/2023, 5:50 PM// file: JsFaultReportLexer.kt
@file:JsModule("your-package/JsFaultReportLexer")
@JsName("default")
external class JsFaultReportLexer
Artem Kobzar
11/24/2023, 5:50 PMEdoardo Luppi
11/24/2023, 5:51 PMBut why don't you want to import them directly without the externals?Mmm, what do you mean without externals?
Artem Kobzar
11/24/2023, 5:53 PMArtem Kobzar
11/24/2023, 5:53 PMJsFaultReportLexer
is generated not from a kotlin source code?Edoardo Luppi
11/24/2023, 5:53 PMparsers-js
are generated by another tool (ANTLR).
And unfortunately those use the ES6 module system, not CommonJS.Artem Kobzar
11/24/2023, 5:55 PMEdoardo Luppi
11/24/2023, 5:57 PMEdoardo Luppi
11/24/2023, 6:03 PMError [ERR_REQUIRE_ESM]: require() of ES Module C:\Users\edoardo.luppi\...\build\js\node_modules\parsers-js\JsFaultReportLexer.js from C:\Users\edoardo.luppi\...\build\js\packages\parsers-test\kotlin\parsers-test.js not supported.
Instead change the require of JsFaultReportLexer.js in C:\Users\edoardo.luppi\IdeaProjects\...\build\js\packages\parsers-test\kotlin\parsers-test.js to a dynamic import() which is available in all CommonJS modules.
at C:\Users\edoardo.luppi\...\build\js\packages\parsers-test\kotlin\parsers-test.js:5:29
at Object.<anonymous> (C:\Users\edoardo.luppi\...\build\js\packages\parsers-test\kotlin\parsers-test.js:18:2)
Edoardo Luppi
11/24/2023, 6:09 PMArtem Kobzar
11/24/2023, 6:18 PMArtem Kobzar
11/24/2023, 6:18 PMrequire
function insideEdoardo Luppi
11/24/2023, 6:19 PMrequire
(I did call useEsModules
btw)Artem Kobzar
11/24/2023, 6:21 PMjs("require(...)")
somewhere?Edoardo Luppi
11/24/2023, 6:22 PMjsMain
or jsTest
Edoardo Luppi
11/24/2023, 6:23 PMparsers-test.js
file
(function (root, factory) {
if (typeof define === 'function' && define.amd)
define(['exports', 'parsers-js/JsFaultReportLexer', './kotlin-kotlin-stdlib.js', './kotlin-kotlin-test-kotlin-test-js-ir.js'], factory);
else if (typeof exports === 'object')
factory(module.exports, require('parsers-js/JsFaultReportLexer'),
Artem Kobzar
11/24/2023, 6:45 PMuseEsModules
? Because seems like the file generated with UMD module systemArtem Kobzar
11/24/2023, 6:45 PM.mjs
file extensionEdoardo Luppi
11/24/2023, 6:47 PMproject.kmpExtension.js(<http://KotlinJsCompilerType.IR|KotlinJsCompilerType.IR>) {
moduleName = project.name
nodejs {
if (generatePackage) {
// Generate the distribution packages under "/generated-packages".
// This allows using the outputted packages as part of a workspace more easily
distribution {
val rootDir = project.rootProject.layout.projectDirectory
val generatedPackagesDir = rootDir.dir("generated-packages/${project.name}")
outputDirectory.set(generatedPackagesDir)
}
}
testTask {
useMocha {
timeout = "0" // Override default 2s timeout
}
filter.isFailOnNoMatchingTests = true
}
}
binaries.library()
// Electron doesn't support ES modules yet. Switch to useEsModules() once it does.
// See <https://github.com/electron/electron/pull/37535>
if (jsNodeConfig.useEsModules.getOrElse(false)) {
useEsModules()
} else {
useCommonJs()
}
...
Artem Kobzar
11/24/2023, 6:48 PMuseEsModules
inside the testTask, just to check if it worksEdoardo Luppi
11/24/2023, 6:48 PMEdoardo Luppi
11/24/2023, 6:50 PMEdoardo Luppi
11/24/2023, 6:52 PMArtem Kobzar
11/24/2023, 6:56 PMEdoardo Luppi
11/24/2023, 6:56 PMEdoardo Luppi
11/24/2023, 6:57 PMEdoardo Luppi
11/25/2023, 12:32 AM