标签: babeljs

使用Node.js需要与ES6导入/导出

在我正在合作的项目中,我们有两种选择,我们可以使用哪个模块系统:

  1. 使用require和导出模块,并使用module.exports和导出exports.foo.
  2. 使用ES6导入模块import,并使用ES6导出export

使用一个优于另一个是否有任何性能优势?如果我们使用ES6模块而不是Node模块,还有什么我们应该知道的吗?

javascript node.js ecmascript-6 babeljs

840
推荐指数
10
解决办法
47万
查看次数

未定义Babel 6 regeneratorRuntime

我正在尝试使用异步,从零开始等待Babel 6,但我得到的再生器运行时没有定义.

.babelrc文件

{
    "presets": [ "es2015", "stage-0" ]
}
Run Code Online (Sandbox Code Playgroud)

package.json文件

"devDependencies": {
    "babel-core": "^6.0.20",
    "babel-preset-es2015": "^6.0.15",
    "babel-preset-stage-0": "^6.0.15"
}
Run Code Online (Sandbox Code Playgroud)

.js文件

"use strict";
async function foo() {
  await bar();
}
function bar() { }
exports.default = foo;
Run Code Online (Sandbox Code Playgroud)

在没有async/await的情况下正常使用它可以正常工作.我有什么想法我做错了吗?

javascript node.js babeljs

569
推荐指数
29
解决办法
41万
查看次数

并行调用async/await函数

据我所知,在ES7/ES2016中,将多个await代码放在代码中将类似于.then()使用promise 进行链接,这意味着它们将一个接一个地执行,而不是在并行执行.所以,例如,我们有这个代码:

await someCall();
await anotherCall();
Run Code Online (Sandbox Code Playgroud)

我是否理解正确,anotherCall()只有在someCall()完成后才会被调用?并行调用它们的最优雅方式是什么?

我想在Node中使用它,所以也许有一个async库的解决方案?

编辑:我对这个问题中提供的解决方案不满意:由于异步生成器中的非并行等待承诺而减速,因为它使用生成器而我正在询问更一般的用例.

javascript asynchronous node.js ecmascript-6 babeljs

347
推荐指数
9
解决办法
14万
查看次数

babel-loader jsx SyntaxError:意外的令牌

我是React + Webpack的初学者.

我在我的hello world web应用程序中发现了一个奇怪的错误.

我在webpack中使用babel-loader来帮助我将jsx转换为js,但看起来babel无法理解jsx语法.

这是我的依赖项:

"devDependencies": {
  "babel-core": "^6.0.14",
  "babel-loader": "^6.0.0",
  "webpack": "^1.12.2",
  "webpack-dev-server": "^1.12.1"
},
"dependencies": {
  "react": "^0.14.1"
}
Run Code Online (Sandbox Code Playgroud)

这是我的 webpack.config.js

var path = require('path');
module.exports = {
  entry: ['webpack/hot/dev-server',path.resolve(__dirname, 'app/main.js')],
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'bundle.js'
  },
  module: {
      loaders: [
          { test: /\.js$/, exclude: /node_modules/, loader: "babel-loader"}
      ]
  }
};
Run Code Online (Sandbox Code Playgroud)

这是我的 app/main.js

var React = require("react");
React.render(<h1>hello world</h1>,document.getElementById("app"));
Run Code Online (Sandbox Code Playgroud)

这是错误信息

ERROR in ./app/main.js
Module build failed: SyntaxError: ~/**/app/main.js: Unexpected token (2:13)
  1 | …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs webpack babeljs

308
推荐指数
5
解决办法
27万
查看次数

如何在使用babel和webpack时生成源图?

我是webpack的新手,我需要设置一下来生成源图.我正在webpack serve从命令行运行,它成功编译.但我真的需要源图.这是我的webpack.config.js.

var webpack = require('webpack');

module.exports = {

  output: {
    filename: 'main.js',
    publicPath: '/assets/'
  },

  cache: true,
  debug: true,
  devtool: true,
  entry: [
      'webpack/hot/only-dev-server',
      './src/components/main.js'
  ],

  stats: {
    colors: true,
    reasons: true
  },

  resolve: {
    extensions: ['', '.js', '.jsx'],
    alias: {
      'styles': __dirname + '/src/styles',
      'mixins': __dirname + '/src/mixins',
      'components': __dirname + '/src/components/',
      'stores': __dirname + '/src/stores/',
      'actions': __dirname + '/src/actions/'
    }
  },
  module: {
    preLoaders: [{
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      loader: 'jsxhint'
    }],
    loaders: …
Run Code Online (Sandbox Code Playgroud)

javascript build-process source-maps webpack babeljs

307
推荐指数
5
解决办法
16万
查看次数

无法在事件处理程序中访问React实例(this)

我在ES6中编写了一个简单的组件(使用BabelJS),并且函数this.setState不起作用.

典型的错误包括

无法读取未定义的属性'setState'

要么

this.setState不是函数

你知道为什么吗?这是代码:

import React from 'react'

class SomeClass extends React.Component {
  constructor(props) {
    super(props)
    this.state = {inputContent: 'startValue'}
  }

  sendContent(e) {
    console.log('sending input content '+React.findDOMNode(React.refs.someref).value)
  }

  changeContent(e) {
    this.setState({inputContent: e.target.value})
  } 

  render() {
    return (
      <div>
        <h4>The input form is here:</h4>
        Title: 
        <input type="text" ref="someref" value={this.inputContent} 
          onChange={this.changeContent} /> 
        <button onClick={this.sendContent}>Submit</button>
      </div>
    )
  }
}

export default SomeClass
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-6 reactjs babeljs

201
推荐指数
4
解决办法
6万
查看次数

Babel 6更改了导出默认值的方式

之前,巴贝尔会添加这条线module.exports = exports["default"].它不再这样做了.在我能做之前,这意味着什么:

var foo = require('./foo');
// use foo
Run Code Online (Sandbox Code Playgroud)

现在我必须这样做:

var foo = require('./foo').default;
// use foo
Run Code Online (Sandbox Code Playgroud)

这不是什么大不了的事(我猜它应该一直都是这样).问题是我有很多代码依赖于以前的工作方式(我可以将大部分代码转换为ES6导入,但不是全部转换).任何人都可以给我提示如何使旧的方式工作,而不必通过我的项目并解决这个问题(甚至一些关于如何编写codemod来做这个的说明将是非常光滑的).

谢谢!

例:

输入:

const foo = {}
export default foo
Run Code Online (Sandbox Code Playgroud)

使用Babel输出5

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;
module.exports = exports["default"];
Run Code Online (Sandbox Code Playgroud)

使用Babel 6(和es2015插件)输出:

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
var foo = {};
exports["default"] = foo;
Run Code Online (Sandbox Code Playgroud)

请注意,输出的唯一区别是module.exports = exports["default"].


编辑

您可能对我在解决我的具体问题后写的博客文章感兴趣:误解ES6模块,升级Babel,眼泪和解决方案

commonjs ecmascript-6 babeljs

193
推荐指数
3
解决办法
7万
查看次数

Nodejs5和babel中的"意外令牌导入"?

在js文件中,我使用import而不是require

import co from 'co';
Run Code Online (Sandbox Code Playgroud)

并尝试直接由nodejs运行它,因为它说导入是'运输功能'并支持没有任何运行时标志(https://nodejs.org/en/docs/es6/),但我收到一个错误

import co from 'co';
^^^^^^

SyntaxError: Unexpected token import
Run Code Online (Sandbox Code Playgroud)

然后我试着用巴贝尔

npm install -g babel-core
npm install -g babel-cli
npm install babel-core //install to babel locally, is it necessary?
Run Code Online (Sandbox Code Playgroud)

并运行

babel-node js.js
Run Code Online (Sandbox Code Playgroud)

仍有同样的错误,意外的令牌导入?

我怎么能摆脱它?

javascript node.js ecmascript-6 package.json babeljs

192
推荐指数
7
解决办法
27万
查看次数

ES6导出/导入索引文件

我目前正在通过webpack/babel在React应用程序中使用ES6.我正在使用索引文件来收集模块的所有组件并将其导出.不幸的是,这看起来像这样:

import Comp1_ from './Comp1.jsx';
import Comp2_ from './Comp2.jsx';
import Comp3_ from './Comp3.jsx';

export const Comp1 = Comp1_;
export const Comp2 = Comp2_;
export const Comp3 = Comp3_;
Run Code Online (Sandbox Code Playgroud)

所以我可以很好地从其他地方导入它,如下所示:

import { Comp1, Comp2, Comp3 } from './components';
Run Code Online (Sandbox Code Playgroud)

显然这不是一个非常好的解决方案,所以我想知道,如果有任何其他方式.我似乎无法直接导出导入的组件.

javascript ecmascript-6 webpack babeljs

182
推荐指数
5
解决办法
9万
查看次数

如何使用箭头函数(公共类字段)作为类方法?

我刚接触使用带有React的ES6类,之前我已经将我的方法绑定到当前对象(在第一个示例中显示),但ES6是否允许我使用箭头将类函数永久绑定到类实例?(当作为回调函数传递时很有用.)当我尝试使用它时,我遇到错误,就像使用CoffeeScript一样:

class SomeClass extends React.Component {

  // Instead of this
  constructor(){
    this.handleInputChange = this.handleInputChange.bind(this)
  }

  // Can I somehow do this? Am i just getting the syntax wrong?
  handleInputChange (val) => {
    console.log('selectionMade: ', val);
  }
Run Code Online (Sandbox Code Playgroud)

因此,如果我要传递SomeClass.handleInputChangesetTimeout它,那么它将被限定为类实例,而不是window对象.

javascript ecmascript-6 reactjs babeljs ecmascript-next

168
推荐指数
4
解决办法
8万
查看次数