情景:你有一个JS模块,你自己写的,或者第三方写的。它可能具有npm依赖性。它可以用ES6语法编写,并且可以使用新的ES6 (或7,等等)特性。您想在犀牛上使用它。
问题: Rhino支持require()ing文件,但它不支持。它只支持JavaScript 5语法和特性。
我怎么能在Rhino上运行我的新JS呢?
发布于 2019-06-25 14:33:57
您可以将JS捆绑到一个文件中,并将其转换为JS 5。
解决方案: Babel支持JS语法转换。核心-js填充缺少的ES6功能。Browserify支持将依赖树(包括npm依赖项)捆绑到单个独立文件中。
的细节:说起来容易做起来难。继续阅读一步一步的指南。
cd
进入您的bundler目录并运行npm init
来创建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可以改为“使用”,这可能会更好地取决于您的情况。
npm install --global browserify
npm install --save-dev babelify @babel/core @babel/preset-env
npm install core-js
这就完成了你的“邦德勒”本身的设置。您可以保存到目前为止,供将来使用。下面的步骤展示了如何在一个模块上使用这个绑定器.
npm install ...
来安装mymodule.js的npm依赖项。import "core-js/stable";
到mymodule.js的顶端。这将导入所需的填充。为了减少文件大小,您可以导入您的模块(及其依赖项)实际使用的特定JS功能。例如,import "core-js/stable/number/is-nan";
导入Number类上的isNaN方法。但是,要知道您具体使用的是什么可能很困难。这就是为什么结合浏览器列表的“使用”选项可能是减肥的最佳方式。有关更多信息,请参见核js。
例如,您的文件可能如下所示:
import "core-js/stable";
import mylib from "my-3rd-party-lib";
module.exports = mylib;
如果它只是一个第三方库,您想要在Rhino使用。如果它是您自己编写的模块,那么在顶部的核js导入和底部的module.exports之间会有一堆代码。
npm run build
现在应该有一个名为bundle.js的文件。您应该能够将该文件复制到Rhino引擎会找到它的地方,并且它应该可以工作。
cp bundle.js /path/to/where/to/place/dist/file/mymodule.js
编码愉快。
https://stackoverflow.com/questions/56756477
复制相似问题