- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
情况:您有一个自己或第三方编写的 JS 模块。它可能有 npm 依赖项。它可以使用 ES6 语法编写,并且可以使用新的 ES6(或 7 等)功能。您想在 Rhino 上使用它.
问题:Rhino 支持 require()ing 文件,但它不支持 npm 的 OOTB。它仅支持 JavaScript 5 语法和功能。
我如何在 Rhino 上运行我的漂亮的新 JS 东西?
最佳答案
您可以将 JS 捆绑到单个文件中并将其转换为 JS 5。
解决方案: Babel支持JS语法转换。 core-js polyfills 填补了缺失的 ES6 功能。 Browserify 支持将依赖关系树(包括 npm 依赖关系)捆绑到单个独立文件中。
详细信息:说起来容易做起来难。请继续阅读分步指南。
创建一个“bundler”目录。稍后,我们会将 mymodule.js 放入其中,但让我们暂缓这样做。
cd
进入您的捆绑程序目录并运行 npm init
以创建 package.json 文件。
将构建命令添加到 package.json 的“脚本”部分
:
"build": "browserify mymodule.js -t babelify --standalone mymodule -o bundle.js"
browserify mymodule.js
意味着 browserify 将捆绑 mymodule.js 及其所有依赖项。 -t babelify
表示 babel 将转译代码,将 ES6 内容转换为 5。 --standalone mymodule
表示模块通过 module.exports 导出的内容将被保留。 -o bundle.js
表示输出文件将为bundle.js。当您将其添加到 Rhino 时,您需要将此文件重命名回您的模块名称。
:
module.exports = function (api) {
api.cache(true);
const presets = [
[
"@babel/preset-env",
{
useBuiltIns: "entry",
corejs: 3,
}
],
];
const plugins = [];
return {
presets,
plugins
};
};
目前 corejs 的最新版本是 3,但是如果有的话请使用更新的版本。 useBuiltins 可以改为“usage”,这可能会更好,具体取决于您的情况。
:
npm install --global browserify
npm install --save-dev babelify @babel/core @babel/preset-env
npm install core-js
这就完成了“ bundler ”本身的设置。您可以保存目前拥有的内容以供将来使用。以下步骤现在展示如何在您的模块之一上使用此 bundler ...
将模块文件(我们称之为 mymodule.js)及其所有依赖项放入 bundler 目录中。这包括运行 npm install ...
来安装 mymodule.js 的所有 npm 依赖项。
添加行
:
import "core-js/stable";
到 mymodule.js 的顶部。这会导入所需的 Polyfill。为了减少文件大小,您可以导入模块(及其依赖项)实际使用的特定 JS 功能。例如,import "core-js/stable/number/is-nan";
可导入 Number 类的 isNaN 方法。但可能很难知道您具体使用什么。这就是为什么“使用”选项与浏览器列表一起可能是最好的瘦身方法。请参阅core-js了解更多。
例如,您的文件可能如下所示:
import "core-js/stable";
import mylib from "my-3rd-party-lib";
module.exports = mylib;
如果它只是您想在 Rhino 中使用的第 3 方库。如果是你自己写的模块,那么顶部的 core-js import 和底部的 module.exports 之间就会有一堆代码。
:
npm run build
您现在应该有一个名为bundle.js 的文件。您应该能够将该文件复制到 Rhino 引擎可以找到它的位置,并且它应该可以工作。
cp bundle.js /path/to/where/to/place/dist/file/mymodule.js
祝你编码愉快。
关于javascript - 如何在 Rhino 中运行 ES6 和 npm deps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56756477/
我使用 go dep 工具版本 v0.4.1,现在当我运行 dep init 时它会按预期创建 2 个文件,当我打开 gopkg.lock 我发现例如以下内容 [[projects]] name
运行 dep ensure 后,go-chi 缺少中间件子包。 project-backend | main.go:8:2: cannot find package "github.com/
我正在查看新架构组件的 google 示例,在那里我找到了如下代码: dependencies { // Support libraries implementation deps.s
我有一个包含 2 个项目的 Visual Studio 解决方案,都在 .Net Core 3.1 中 XYZ.Api, Xyz.ApiTests ApiTests 是一个用于集成测试的 xUnit
我正在使用 Rails 3.1 beta 以及 Ruby 1.9.2 和 rake 0.9.2,并且我编写了一堆 rake 任务。这是一个例子: namespace :data do desc "
请遵循以下菜单顺序: 文件->新建->项目-> ASP> .NET核心Web应用程序(.Net Framework) 构建->构建解决方案 得到这个错误: 错误C:\ Users \ Sam \ Do
我正在考虑尝试一些 jit 编译(只是为了学习),因为我在家里运行所有主要的三个(windows、os x、linux),所以让它跨平台工作会很好。 考虑到这一点,我想知道是否有任何方法可以摆脱使用虚
是否可以检查是否启用了数据执行保护? 有没有和这个CMD命令一样的功能 wmic OS Get DataExecutionPrevention_SupportPolicy 然后返回这样的东西? 0 –
当运行我们的一个软件时,测试人员面临着 Windows 的数据执行阻止对话框。 我们尝试在开发人员计算机上重现这种情况以进行调试:但没有成功。 有谁知道如何找到可能导致 DEP 保护终止应用程序的原因
我们有一个应用程序,其中堆的某些部分作为汇编指令执行/用于测试目的 - 我们将程序下载到 PLC,但允许用户通过在下载到 PLC 之前执行他们的代码来模拟运行他们的应用程序。之前我们总是从存储指令的堆
我已经使用以下命令安装了 httprouter 包 dep ensure -add github.com/julienschmidt/httprouter vendor └
我正在尝试使用 DerivingVia为具有函数依赖关系的多参数类型类削减实例定义的样板。 我有这些类型和类: {-# LANGUAGE FunctionalDependencies #-} {-#
我有一个查询,可以有效地返回特定标签的依赖项的所有标签。我想知道这些依赖项的实际文件路径。 $ bazel query 'deps(//foo:bar)' --noimplicit_deps //ba
我们正在使用 rebar 为我们的项目拉取依赖项,其中许多来自 github。我们的配置看起来像: {deps, [ {cowboy, "", {git, "git://github.
在客户端我有这个: var Coll1 = new Meteor.Collection('myCollection1'); var Coll2 = new Meteor.Collection('myC
我需要确定 Windows DEP 是否被禁用,是否设置为基本的 Windows 程序和服务或除我选择的程序之外的所有程序。 我一直在寻找一种方法,但没有成功。有没有办法做到这一点?用 C# 开发。
我想在我的 elixir 应用程序的测试中使用我的依赖项之一的测试目录中的模块。我想知道是否有办法做到这一点。谢谢。 我试过import ,这给了我一个编译错误 elixir module is n
我正在使用 kubebuilder创建 Kubernetes 运营商项目。运行 quickstart guide 中描述的项目初始化命令后 kubebuilder init --domain k8s.
我刚刚开始使用 cloudstack,想要让开发环境运行起来。我安装了 Maven,并使用 Eclipse。我一直在关注this指南,这似乎有点过时,但我一直无法找到有关在 Eclipse 中实现此操
谁能告诉我lein deps是如何工作的?如果lein在~/.m2中找到项目所需版本的依赖项,lein仍然会再次下载相同的包? 最佳答案 让我们将其分为几个问题,我将尝试对每个问题进行简要介绍: 有人
我是一名优秀的程序员,十分优秀!