~ require by relative path
diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
index 991a5f0..aeccf9b 100644
--- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
+++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt
@@ -230,7 +230,8 @@
                     generateFullJs = !arguments.irDce,
                     generateDceJs = arguments.irDce,
                     dceDriven = arguments.irDceDriven,
-                    multiModule = arguments.irPerModule
+                    multiModule = arguments.irPerModule,
+                    commonJsRelativePath = true
                 )
             } catch (e: JsIrCompilationError) {
                 return COMPILATION_ERROR
@@ -239,9 +240,9 @@
             val jsCode = if (arguments.irDce && !arguments.irDceDriven) compiledModule.dceJsCode!! else compiledModule.jsCode!!
             outputFile.writeText(jsCode.mainModule)
             jsCode.dependencies.forEach { (name, content) ->
-                val nodeModules = outputFile.resolveSibling("node_modules")
-                if (nodeModules.exists()) check(nodeModules.isDirectory) else nodeModules.mkdir()
-                nodeModules.resolve("$name.js").writeText(content)
+//                val nodeModules = outputFile.resolveSibling("node_modules")
+//                if (nodeModules.exists()) check(nodeModules.isDirectory) else nodeModules.mkdir()
+                outputFile.resolveSibling("$name.js").writeText(content)
             }
             if (arguments.generateDts) {
                 val dtsFile = outputFile.withReplacedExtensionOrNull(outputFile.extension, "d.ts")!!
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt
index 669473e8..3dba6bd 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/compiler.kt
@@ -46,7 +46,8 @@
     generateDceJs: Boolean = false,
     dceDriven: Boolean = false,
     es6mode: Boolean = false,
-    multiModule: Boolean = false
+    multiModule: Boolean = false,
+    commonJsRelativePath: Boolean = false
 ): CompilerResult {
     stageController = object : StageController {}
 
@@ -94,7 +95,8 @@
             mainArguments,
             fullJs = true,
             dceJs = false,
-            multiModule = multiModule
+            multiModule = multiModule,
+            commonJsRelativePath = commonJsRelativePath
         )
         return transformer.generateModule(allModules)
     } else {
@@ -104,7 +106,8 @@
             mainArguments,
             fullJs = generateFullJs,
             dceJs = generateDceJs,
-            multiModule = multiModule
+            multiModule = multiModule,
+            commonJsRelativePath = commonJsRelativePath
         )
         return transformer.generateModule(allModules)
     }
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt
index 7d33a3b..7fd930b 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/IrModuleToJsTransformer.kt
@@ -32,7 +32,8 @@
     var namer: NameTables = NameTables(emptyList()),
     private val fullJs: Boolean = true,
     private val dceJs: Boolean = false,
-    private val multiModule: Boolean = false
+    private val multiModule: Boolean = false,
+    private val commonJsRelativePath: Boolean = false
 ) {
     private val generateRegionComments = backendContext.configuration.getBoolean(JSConfigurationKeys.GENERATE_REGION_COMMENTS)
 
@@ -204,7 +205,7 @@
             }
 
             val moduleName = declareFreshGlobal(module.safeName)
-            modules += JsImportedModule(moduleName.ident, moduleName, moduleName.makeRef())
+            modules += JsImportedModule(moduleName.ident, moduleName, moduleName.makeRef(), commonJsRelativePath)
 
             names.forEach {
                 imports += JsVars(JsVars.JsVar(JsName(it), JsNameRef(it, JsNameRef("\$crossModule\$", moduleName.makeRef()))))
diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleWrapperTranslation.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleWrapperTranslation.kt
index 1d9aace..5ac6412 100644
--- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleWrapperTranslation.kt
+++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/ModuleWrapperTranslation.kt
@@ -94,7 +94,7 @@
         val moduleName = scope.declareName("module")
         val requireName = scope.declareName("require")
 
-        val invocationArgs = importedModules.map { JsInvocation(requireName.makeRef(), JsStringLiteral(it.externalName)) }
+        val invocationArgs = importedModules.map { JsInvocation(requireName.makeRef(), JsStringLiteral(it.externalCommonJsName)) }
         val invocation = JsInvocation(function, listOf(JsNameRef("exports", moduleName.makeRef())) + invocationArgs)
         return listOf(invocation.makeStmt())
     }
diff --git a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt
index 3a067e2..9bddb30 100644
--- a/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt
+++ b/js/js.ast/src/org/jetbrains/kotlin/js/backend/ast/JsImportedModule.kt
@@ -16,7 +16,14 @@
 
 package org.jetbrains.kotlin.js.backend.ast
 
-class JsImportedModule(val externalName: String, var internalName: JsName, val plainReference: JsExpression?) {
+class JsImportedModule(val externalName: String, var internalName: JsName, val plainReference: JsExpression?, val commonJsRelativePath: Boolean) {
+
+    constructor(externalName: String, internalName: JsName, plainReference: JsExpression?): this(externalName, internalName, plainReference, false)
+
     val key = JsImportedModuleKey(externalName, plainReference?.toString())
 }
+
+val JsImportedModule.externalCommonJsName: String
+    get() = if (commonJsRelativePath) "./$externalName.js" else externalName
+
 data class JsImportedModuleKey(val baseName: String, val plainName: String?)
\ No newline at end of file
diff --git a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
index 18106a6..e42d269 100644
--- a/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
+++ b/libraries/stdlib/src/kotlin/util/KotlinVersion.kt
@@ -72,6 +72,6 @@
          * Returns the current version of the Kotlin standard library.
          */
         @kotlin.jvm.JvmField
-        public val CURRENT: KotlinVersion = KotlinVersion(1, 4, 255) // value is written here automatically during build
+        public val CURRENT: KotlinVersion = KotlinVersion(1, 4, 99) // value is written here automatically during build
     }
 }