问题标签 [scalajs-bundler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
859 浏览

scala.js - Scala.js 会生成小包吗?

虽然我喜欢 Scala 这种语言和 Scala.js 这个项目,但我对最终 JS 包的大小感到有些迟疑,即使是在 fullOptJS 模式下也是如此。

我的迫切需要是创建一个小型库以在浏览器中使用。> 150kb 是一个很大的要求,并且可以说是像 BuckleScript/ReasonML 这样的类似工具承诺快速执行和小包。

Scala.js 会在可预见的未来开始生成更小的包吗?

0 投票
0 回答
227 浏览

javascript - scalajs-bundler 包含在 jQuery 插件中

我正在使用这个带有jQ​​uery 外观的jQuery 模态对话框插件。它一直在工作,直到我决定使用scala-bundler从Webpack更改。Webpack 生成的捆绑包自定义 Javascript 不包含模式对话框脚本。可能是这个模态对话框库不兼容 Webpack,但我不知道,因为我不熟悉 Webpack。如何让我的项目生成包含模式对话框的最终包?请指教。谢谢jsDependencies

查看模态对话框脚本,我想我只需要在加载时执行模态对话框脚本,它就会将自己附加到$. 我创建的 jQuery 外观应该保持不变。不幸的是,我不知道如何使用 Scala.js。

我已经包括了我的一部分build.sbt

更新 1

jQuery插件在我使用自定义$暴露后设法看到,如下所示。但是,我必须在 HTML 页面中使用. 如何在 ScalaJS 中包含和执行插件并避免HTML 页面中的标签?jQuerywebpack.config.js<script ...><script>

更新 2

闲置了几个月后,几天前我又拿起了它。最后,我通过 scalajs-bundler 让它与 Webpack 一起工作。

单击此处获取解决方案。

0 投票
1 回答
121 浏览

scala.js - 在 Scala.js 外观中,为什么 @js.native 注释排除了 @JSExport 注释?

请考虑使用纯 JavaScript CommonJS 模块实现的原生依赖项的 Scala.js 库。

该库包含 JavaScript 依赖项的外观。正如预期的那样,外观包含很多代码,例如:

不幸的是,ScalaJS-Bundler 以一种将 Foo 隐藏在全局范围内的方式捆绑了它。显而易见的修复涉及将 @JSExport 注释添加到其他两个,但这会导致编译器错误。

为什么 js.native 与 JSExport 不兼容?在外观上添加对@JSExport 的支持需要什么?

现在有什么变通办法吗?

0 投票
2 回答
383 浏览

performance - 如何分解scala.js JS输出的大小

存在一些 webpack 包分析脚本,它们显示包含的模块列表及其大小。但是,Scala.js 为所有 Scala 代码生成了一个大模块,因此这些工具无法查看它。

作为库作者和其他 Scala.js 库的最终用户,我想知道各种 Scala 包/类对我的包大小有多少贡献。

我知道 Scala.js 优化使得不可能说给定库的权重正好为 X Kb,所以我对查看特定包的解决方案感兴趣。

目前我能做的最好是"com.package.name在生成的JS文件中搜索,并判断滚动条上结果指示器的密度,但这显然是非常次优的。

所以我的问题是,是否有任何工具甚至半成品脚本可以改进我正在做的事情?

0 投票
2 回答
335 浏览

scala - JSweet 能否移植 Java 库以用于交叉构建的 Scala.js 项目?

在寻找使 Scala.js交叉构建项目的 JavaScript 和 JVM 端都可以访问 Java 库的方法时,请考虑以下实验:

想象一下,一个 Scala.js 项目需要高级矩阵数学功能,例如奇异值分解。虽然 JavaScript 世界有Numeric.js,而 JVM 世界有很多选择,但JAMA尤其是其中之一,在提出这个问题的时候还没有交叉构建 Scala.js 的解决方案。

我们有什么选择?

  1. 为 Scala.js 重新编写或移植一个矩阵库。
  2. 将 Numeric.js 外观和 JAMA 包装到一个通用的 Scala.js 接口中。
  3. 为 Numeric.js 编写外观,然后使用Nashorn编译它以获得 JVM 支持。
  4. 使用JSweet和时尚的 Scala.js 外观将 JAMA 转换为 JavaScript 。

这个问题反映了选项 4。

为 JSweet 转译器重新调整 JAMA,通过 npm将转译后的 JavaScript 发布为CommonJS 模块,并为 CommonJS 模块编写Scala.js 外观之后,Scala 代码现在可以在 JVM 端访问 Jama,并在 JS 端访问它的一个端口.

不幸的是,JVM端的核心数据结构在Scala语法中有type:double[][], Array[Array[Double]],但是JSweet将其转换为JavaScript数组类型,js.Array[js.Array[Double] ] 在 Scala.js 语法中。

现在,从 Scala.js 交叉构建的角度来看,存在两个名称相同、功能相同但完全不同且独立的库。

根据 Scala 语法,我们可以在 JS 端构造 3D 单位矩阵,如下所示:

在 JVM 端,我们编写:

我们如何统一这两种实现方式?

将 js.Array 和 Array 等同起来有什么技巧吗?

你会建议一种完全不同的方法来使交叉构建的 Scala.js 项目可以访问 Java 库吗?

0 投票
1 回答
314 浏览

scala.js - 在 Play 中,如何将 js 文件从 ScalaJS 客户端复制到服务器?

我正在尝试编写一个包含 ScalaJS 和部分 Play 框架的应用程序。我正在使用ScalaJS 捆绑器。它很好地捆绑了我的 JavaScript,我可以看到它们应该去的结果文件。

在此处输入图像描述

但我注意到只有client-jsdeps.jsclient-fastopt.js应用程序才可用。原因是它们是唯一复制到路径的文件server/target/web/public/main。我到处寻找我能想到的地方,sbt构建文件,配置文件,到处都是,我找不到为什么这些文件被复制而没有其他文件。我想-bundle改为复制文件。那个设定在哪里?

值得注意的是,与应用打包的两个文件并没有出现在用户可编辑的路径中server/public/js,它们是直接复制到 WAR 文件中的,因此在target目录中可见。

0 投票
1 回答
909 浏览

webpack - scalajs 和 webpack4 配置设置问题

我正在使用 webpack 4.20.2 和 scalajs ("0.6.24") ,scalajs bundler(0.13.1)

当我构建捆绑文件时,我遇到了 webpack 异常。我正在附加使用 webpack.config.dev.js 并生成 scalajs-webpack.config.js 的 build.sbt 。如果我在 build.sbt 中直接使用 scalajs-webpack.config.js 我使用 hack 来克服这个异常,那么我不会收到错误并且能够生成单个包文件但是当使用 webpack-dev-config.js 时,如下所示,然后我得到错误。

webpack.config.dev.js

生成 scalajs-webpack.config.js

构建.sbt

错误

webpack.config.shared.js

0 投票
1 回答
66 浏览

scala - sbt-crossproject 插件能否支持两个具有两个独立主类的 Scala.js 构建,两者的输出都由 scalajs-bundler 插件管理?

假设您有一个 Scala.js 项目,它可以有意义地编译为浏览器 JavaScript、Node.js 和 JVM。

现在想象在浏览器中,应用程序的一部分在窗口中运行,而另一部分在 Web Worker 中运行。

SBT 可以捆绑两个版本的源代码吗?一个版本有一个用于浏览器窗口的主类,而另一个版本有一个运行 Web Worker 代码的不同主类?

如果是这样,您将如何配置它?

请注意,该项目依赖于 JavaScript 原生库和 webpack。

0 投票
1 回答
269 浏览

scala - SBT:如何在`build.sbt`中使用`fastOptJS::webpack`?

我有build.sbt一个复制任务,例如:

这个想法是运行~copyTask,以便更改自动在我的 HTML 页面中。

在我使用ScalaJSBundlerPlugin.

现在的任务是fastOptJS::webpack

问题是如何调整我的复制任务?

我试过没有成功:

0 投票
1 回答
113 浏览

sbt - scalajs-bundler 不会创建 *-fastopt-bundler.js.map" 作为值

val bundle = (Compile / fastOptJS / webpack).value在 my中运行时build.sbt,我在“捆绑包”中获得以下文件:

来源

我缺少的是-fastopt-bundler.js.map.

如果我检查target/scala-2.12/scalajs-bundler/main文件在那里!

我的唯一设置build.sbt是:

webpackBundlingMode := BundlingMode.LibraryAndApplication()