情况: 您有一个自己编写或第三方编写的JS模块。它可能具有npm依赖项。它可能是使用ES6语法编写的,并且可能使用新的ES6(或7等)功能。您想在Rhino上使用它。
问题: Rhino支持require()文件,但它没有原生支持npm。它仅支持JavaScript 5语法和功能。
如何在Rhino上运行我的新JS代码?
如何在Rhino上运行我的新JS代码?
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 语法转换成 ES5。 --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
import "core-js/stable";
import "core-js/stable/number/is-nan";
导入Number类上的isNaN方法。不过,知道您具体使用了哪些功能可能会很困难。这就是为什么“usage”选项与browserslist一起使用可能是最好的瘦身方式。有关更多信息,请参见core-js。import "core-js/stable";
import mylib from "my-3rd-party-lib";
module.exports = mylib;
npm run build
现在您应该有一个名为bundle.js的文件。您应该能够将该文件复制到Rhino引擎可以找到它的地方,这样就可以正常工作。
cp bundle.js /path/to/where/to/place/dist/file/mymodule.js
愉快的编码。