我一直在搜索很多东西,发现很多半答案或答案都不能解决我的问题,所以:
我只是想输入一个字符串,该字符串是常规来源的javascript代码(不是nodejs,只是常规JavaScript),然后将其转换为另一个STRING(不是文件) ),其中包含与浏览器兼容的JavaScript(es5或其他版本)。
我不是要以es5的身份运行nodejs,也不是要转换单个文件,而是要使用更新的JavaScript的 string 并获取 string < / strong>较旧的JavaScript。
现在,使用BabelJS docs表示要这样做:
babel.transform(code, options, function(err, result) {
result; // => { code, map, ast }
});
在其中创建一个.babelrc文件(并在npm中安装@ babel / preset-env --save-dev)后:
{
"presets": ["@babel/preset-env"]
}
但是在文档中,并没有说什么“选项”应该是只是为了使其起作用。
这里的许多其他帖子说包括npm install babel-preset-es2015
和
module: {
loaders: [
{
test: /\.js$/,
loader: 'babel-loader?presets[]=es2015'
}
]
}
但是我认为这是针对不再使用的旧版本
和this famous answer给出了解决方案:
npm install babel-preset-env
然后运行
babel --presets env proxy.js --out-file proxified.js
或创建一个包含以下内容的.babelrc文件
{ "presets": [ "env" ] }
像以前一样运行它。
env在这种情况下是一个预设,基本上说是编译所有 ES5的标准ES *行为。如果您使用的是Node版本, 支持某些ES6,您可能要考虑做
{ "presets": [ ["env", { "targets": { "node": "true" } }], ] }
但这只是创建一个新的javascript文件,我只是想从另一个字符串中创建一个字符串。
我认为我需要使用Babel 7,因为这是最新版本,但是我不断收到各种控制台错误。
有人能提供一个简单的逐步过程来使babel(最好是7)将较新的JavaScript的 string 转换为较旧的 string 吗? / p>
答案 0 :(得分:1)
我不确定这是否是您所期望的。
我有一个简单的项目结构:
-- package.json
-- index.js
-- .babelrc
index.js
let babel = require('@babel/core')
// some es6 code
let code = `
let a = () => { console.log('hello') }
`
babel.transform(
code,
{
babelrc: true,
filename: '.babelrc'
},
function(err, result) {
console.log(result.code)
}
)
这是控制台输出:
D:\Documents\code\test>node index.js
"use strict";
var a = function a() {
console.log('hello');
};
D:\Documents\code\test>
以及我的.babelrc
和package.json
文件,以备您感兴趣。
{
"presets": [
"@babel/preset-env"
]
}
我只是遵循了使用指南。在这种情况下,不需要polyfill
和cli
。
{
"name": "test",
"version": "1.0.0",
"dependencies": {
"@babel/polyfill": "^7.2.5"
},
"devDependencies": {
"@babel/cli": "^7.2.3",
"@babel/core": "^7.3.4",
"@babel/preset-env": "^7.3.4"
}
}