要求('babel/register')不起作用
require('babel/register') doesn't work
我在 Babel transpiler 客户端上用 ES6 编写了同构应用程序。我希望我的快速服务器具有与客户端代码相同的 ES6 语法。
不幸的是require('babel/register')
不起作用..
server.js
require('babel/register'); // doesn't work
// require('babel-core/register); doesn't work..
const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;
const http = require('http');
const express = require('express');
const address = require('network-address');
let app = express();
app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req, res) => {
res.send('Hello!');
});
http.createServer(app).listen(app.get('port'), function () {
console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
您需要使用 Babel 编译您的代码。
从他们的网站上查看 docs。
安装 babel
和 npm install -g babel
然后执行 babel app.js > compiledApp.js
将您的 ES6 代码编译成 ES5 代码。然后你可以 运行 compiledApp.js
.
如果你想使用 ES6 的一些功能,比如 Object.assign
,由于 polyfill,这些功能没有编译但执行,运行time babel/register
仍然是必需的。
(检查 here 以获取示例和更多详细信息)
编辑: 如评论中所述,您可以使用 register
即时编译。但它会在此 register
之后编译您需要的模块。它将从 node
挂钩 require
函数。更多 here。
您仍然需要编译 register
所在的文件,或者不在此文件中使用任何 ES6。
require('babel/register')
不转译调用它的文件。如果你想让 server.js 包含在即时转译中,你应该用 babel-node
执行它(Babel 的 CLI replacement for node
)。
示例见我的回答。
根据这个 document 你必须使用:
require("babel-register");
此外,您必须将 .babelrc 文件放在启动服务器的目录的根目录中。
{
"presets": ["es2015"]
}
由于 Babel 6
使用 babel-register hook
进行 on-the-fly 转译。
第一个:
npm install babel-register
然后要求它:
require('babel-register');
// not using
// require('babel/register');
// or
// require('babel-core/register);
To 将您的 Ecmascript 6
代码转换为 ecmascript 5
,您必须使用 require babel-register
设置 Babel presets
选项,如下所示:
require('babel-register')({
presets: [ 'es2015' ]
});
与 的答案不同,您不需要 .babelrc
文件。
您还必须安装 babel-preset-es2015
:
npm install babel-preset-es2015
最终您的 Server.js 文件将是:
require('babel-register')({
presets: [ 'es2015' ]
});
const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;
const http = require('http');
const express = require('express');
const address = require('network-address');
let app = express();
app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req, res) => {
res.send('Hello!');
});
http.createServer(app).listen(app.get('port'), function () {
console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
我 运行 遇到类似的问题,试图在服务器上呈现反应页面 (.jsx)。
我通过将下面的代码片段放在我的服务器文件的顶部来修复它
require('babel-register')({
presets: ['es2015', 'react']
});
确保安装了 npm babel-preset-es2015
和 babel-preset-react
解决此问题的步骤:
- 从 server.js
中删除 require('babel/register');
- 创建另一个名为 start.js
的条目文件
在start.js,
require('babel/register');
module.exports = require('./server.js');
结果是 server.js 中的所有代码都将由寄存器即时转译。请确保您已使用具有如下内容的 .babelrc 正确配置了 babel
{
"presets": ["es2015", "stage-0"]
}
自Babel 7开始使用,可以使用@babel/register
npm install --save-dev @babel/core @babel/register
或
yarn add --dev @babel/core @babel/register
如果您正在使用 yarn。
在代码中只需包含以下行:
require("@babel/register");
在 2019 年的前夕,我们在 JS 相关库中仍然没有好的文档,但是,另一方面,我们有 Whosebug。
要在 Node.js 上使用 babel
,您需要
npm install @babel/register @babel/core @babel/preset-env
- 创建一个包含附加内容的文件
pre-index.js
- 运行
node pre-index
您只能在 index.js
中使用 import
s 和其他功能,并将其归档 import
s 或 require
s。
require('@babel/register')({
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current"
}
}
]
]
});
require('./index.js');
我在 Babel transpiler 客户端上用 ES6 编写了同构应用程序。我希望我的快速服务器具有与客户端代码相同的 ES6 语法。
不幸的是require('babel/register')
不起作用..
server.js
require('babel/register'); // doesn't work
// require('babel-core/register); doesn't work..
const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;
const http = require('http');
const express = require('express');
const address = require('network-address');
let app = express();
app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req, res) => {
res.send('Hello!');
});
http.createServer(app).listen(app.get('port'), function () {
console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
您需要使用 Babel 编译您的代码。 从他们的网站上查看 docs。
安装 babel
和 npm install -g babel
然后执行 babel app.js > compiledApp.js
将您的 ES6 代码编译成 ES5 代码。然后你可以 运行 compiledApp.js
.
如果你想使用 ES6 的一些功能,比如 Object.assign
,由于 polyfill,这些功能没有编译但执行,运行time babel/register
仍然是必需的。
(检查 here 以获取示例和更多详细信息)
编辑: 如评论中所述,您可以使用 register
即时编译。但它会在此 register
之后编译您需要的模块。它将从 node
挂钩 require
函数。更多 here。
您仍然需要编译 register
所在的文件,或者不在此文件中使用任何 ES6。
require('babel/register')
不转译调用它的文件。如果你想让 server.js 包含在即时转译中,你应该用 babel-node
执行它(Babel 的 CLI replacement for node
)。
示例见我的回答
根据这个 document 你必须使用:
require("babel-register");
此外,您必须将 .babelrc 文件放在启动服务器的目录的根目录中。
{
"presets": ["es2015"]
}
由于 Babel 6
使用 babel-register hook
进行 on-the-fly 转译。
第一个:
npm install babel-register
然后要求它:
require('babel-register');
// not using
// require('babel/register');
// or
// require('babel-core/register);
To 将您的 Ecmascript 6
代码转换为 ecmascript 5
,您必须使用 require babel-register
设置 Babel presets
选项,如下所示:
require('babel-register')({
presets: [ 'es2015' ]
});
与 .babelrc
文件。
您还必须安装 babel-preset-es2015
:
npm install babel-preset-es2015
最终您的 Server.js 文件将是:
require('babel-register')({
presets: [ 'es2015' ]
});
const env = process.env.NODE_ENV || 'development';
const port = process.env.NODE_PORT || 1995;
const http = require('http');
const express = require('express');
const address = require('network-address');
let app = express();
app.set('port', port);
app.use(express.static(path.join(__dirname, 'public')));
app.get('*', (req, res) => {
res.send('Hello!');
});
http.createServer(app).listen(app.get('port'), function () {
console.info('Demo app is listening on "%s:%s" env="%s"', address(), app.get('port'), env);
});
我 运行 遇到类似的问题,试图在服务器上呈现反应页面 (.jsx)。 我通过将下面的代码片段放在我的服务器文件的顶部来修复它
require('babel-register')({
presets: ['es2015', 'react']
});
确保安装了 npm babel-preset-es2015
和 babel-preset-react
解决此问题的步骤:
- 从 server.js 中删除
- 创建另一个名为 start.js 的条目文件
在start.js,
require('babel/register'); module.exports = require('./server.js');
require('babel/register');
结果是 server.js 中的所有代码都将由寄存器即时转译。请确保您已使用具有如下内容的 .babelrc 正确配置了 babel
{
"presets": ["es2015", "stage-0"]
}
自Babel 7开始使用,可以使用@babel/register
npm install --save-dev @babel/core @babel/register
或
yarn add --dev @babel/core @babel/register
如果您正在使用 yarn。
在代码中只需包含以下行:
require("@babel/register");
在 2019 年的前夕,我们在 JS 相关库中仍然没有好的文档,但是,另一方面,我们有 Whosebug。
要在 Node.js 上使用 babel
,您需要
npm install @babel/register @babel/core @babel/preset-env
- 创建一个包含附加内容的文件
pre-index.js
- 运行
node pre-index
您只能在 index.js
中使用 import
s 和其他功能,并将其归档 import
s 或 require
s。
require('@babel/register')({
presets: [
[
"@babel/preset-env",
{
targets: {
node: "current"
}
}
]
]
});
require('./index.js');