От чего зависит имя выходного файла javascript, сгенерированного плагином scalajs sbt? - PullRequest
0 голосов
/ 24 декабря 2018

В этом проекте:

https://github.com/tribbloid/scalajs-cli-demo

Я определил проект scalajs, используя комбинацию npm и sbt, внутри файла пакета npm я объявляю sbt как скрипт предварительной публикации:

  "scripts": {
    "prepublish": "sbt 'show fullOptJS' && cp target/scala-2.12/scalajs-cli-demo-opt.js ./lib/main.js",
    "test": "sbt test"
  },

В определении сборки sbt используется плагин scalajs sbt для извлечения зависимостей и вызова транспортеров:

resolvers += Resolver.sonatypeRepo("releases")
enablePlugins(ScalaJSPlugin)
name := "Scala.js CLI Demo first release"
scalaVersion := "2.12.7"
scalaJSModuleKind := ModuleKind.CommonJSModule
scalaJSUseMainModuleInitializer := true
mainClass in Compile := Some("HelloWorldApp")

// https://mvnrepository.com/artifact/io.scalajs/nodejs
libraryDependencies += "io.scalajs" %%% "nodejs" % "0.4.2"

moduleName in fullOptJS := "scalajs-cli-demo"

Однако, когда я запускаю npm install, я получаю следующую информацию об ошибке вlog:

67 info lifecycle scalajs-cli-demo@1.0.4~prepublish: Failed to exec prepublish script
68 verbose stack Error: scalajs-cli-demo@1.0.4 prepublish: `sbt 'show fullOptJS' && cp target/scala-2.12/scalajs-cli-demo-opt.js ./lib/main.js`
68 verbose stack Exit status 1
68 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
68 verbose stack     at EventEmitter.emit (events.js:182:13)
68 verbose stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
68 verbose stack     at ChildProcess.emit (events.js:182:13)
68 verbose stack     at maybeClose (internal/child_process.js:962:16)
68 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:251:5)
69 verbose pkgid scalajs-cli-demo@1.0.4
70 verbose cwd /home/peng/git-release/scalajs-cli-demo
71 verbose Linux 4.19.11-041911-generic
72 verbose argv "/usr/bin/node" "/usr/bin/npm" "install"
73 verbose node v10.14.2
74 verbose npm  v6.4.1
75 error code ELIFECYCLE
76 error errno 1
77 error scalajs-cli-demo@1.0.4 prepublish: `sbt 'show fullOptJS' && cp target/scala-2.12/scalajs-cli-demo-opt.js ./lib/main.js`
77 error Exit status 1
78 error Failed at the scalajs-cli-demo@1.0.4 prepublish script.
78 error This is probably not a problem with npm. There is likely additional logging output above.
79 verbose exit [ 1, true ]

Дальнейшие исследования показывают, что файл в команде cp target/scala-2.12/scalajs-cli-demo-opt.js не существует.

Вместо этого файл называется scala-js-cli-demo-opt.js, однако я не могу его найти нигде вscalajs sbt плагин, который определяет это имя файла.На самом деле, имя scala-js-cli-demo даже не существует нигде в моем исходном коде!Итак, как плагин scalajs sbt получает это имя файла?И что я должен сделать, чтобы исправить это?

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Помимо общих полезных ключей, которые определяют имя результирующего артефакта: name, normalizedName (который заменяет неразрешенные символы тире), moduleName и artifactName, вы также можете переопределить, где скомпилированный *Файл 1005 * помещается и как он будет вызываться (несмотря на все эти настройки, связанные с именем) с использованием параметра artifactPath.Например:

Compile / fullOptJS / artifactPath := baseDirectory.value / "lib" / "main.js"

или то же самое с fastOptJS.

0 голосов
/ 24 декабря 2018

ОК. Я сам разбираюсь, имя генерируется из имени проекта / artifactID.В этом случае он просто заменяет все неправильные символы на тире.

...