Tag: ecmascript 6

require('babel / register')不起作用

我有ES6客户端上的同构应用程序与Babel transpiler 。 我希望我的快递服务器具有与客户端代码相同的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'), […]

鉴于ES2015,dependency injection和库抽象,2016年我的理想模块应该是什么样子?

如果不是这样的话,首先我要全部写上我所有的模块 import A from './a.js'; var B = function(){ //use A }; export default B; 然后使用编译器将其构build为某种浏览器或服务器格式。 但是我的一个问题是在import明确./a.js 。 我明白为什么规范是这样做的1 ,赞成静态分析 。 但是有两个非常实际的原因,为什么在模块的文件名和path中烘焙都很麻烦。 正如已经在这里提出的那样 ,当从项目到项目频繁地回收模块时,您很可能无法在项目树中保持一致的path 。 import myModule from './../../vendor/lib/dist/mod.js'到一个模块的代码,这样的导入调用不会让我感觉到未来。 除了path本身之外,指定文件名还会将您closures。 像这样的东西似乎是无辜的: import $ from 'vendor/jquery.js' 但是我想用Zepto代替jQuery呢? 我发现抽象,特别是在供应商库上的抽象,在处理大型代码库,自以为是的开发者和不断变化的JavaScript生态系统时非常有用。 我今天可能要导入React作为我的组件库,但明天呢? 此外,如果我要在客户端和服务器上使用相同的模块,但是我需要不同版本的从属库? 我坚持强有力(但明确而一致)的抽象。 通常,抽象已经采取了某种命名空间的forms。 我幻想一下这个: //BAD: Bakes React into my component modules import ComponentLib from './React.js'; //GOOD: Leaves […]

使用while循环而不是循环进行迭代

ECMAScript 6为迭代引入了生成器,迭代器和语法糖。 带有标志的Node.JS v0.11.4 –harmony –use_strict –harmony_generators 了解以下发电机 function* fibonacci() { let previous = 0; let current = 1; while(true) { let temp = previous; previous = current; yield current = temp + current; } } 然后我可以打印小于1000的斐波那契数。 for(let value of fibonacci()) { if(value > 1000) { break; } console.log(value); } 对于这个例子, while循环代替for循环会更自然,类似于 while(value of fibonacci() […]

将ES6 Iterable转换为数组

假设你有一个类似于数组的Javascript ES6 Iterable,你事先知道它的长度是有限的,那么把它转换成一个Javascript数组的最好方法是什么? 这样做的原因是许多js库(如下划线和lodash)仅支持数组,所以如果您希望在Iterable上使用它们的任何函数,则必须先将其转换为Array。 在python中,你可以使用list()函数。 ES6中有相同的东西吗?

使用ES6语法和dynamicpath导入模块

这工作: import app from './../app.js'; 但是这不是: import app from path.join(process.cwd(), 'app'); 我越来越: SyntaxError: /path/file.js: Unexpected token (5:16) > 5 | import app from path.join(process.cwd(), 'app'); | ^ 有可能(和/或如何)使用“dynamic”path? (不要硬编码path或依赖相对path)。

使用es6和babel-node从根目录导入节点模块

我正在用es6使用babel编译器来编写节点应用程序。 我的根目录下有两个文件index.js & my-module.js – index.js – my-module.js 我-module.js export let myFunc = () => { console.log('myFunc was called!!!'); } index.js import {myFunc} from './my-module'; myFunc(); 如果我从命令行运行下面的行,一切都按预期工作。 $ babel-node index.js >> myFunc was called!!! 但是如果我在导入my-module时删除了这个点: import {myFunc} from '/my-module'; myFunc(); 我收到一个错误: Error: Cannot find module '/my-module' 任何我无法使用绝对path导入模块的原因? 无论如何改变.babelrcconfiguration来支持它? 谢谢

为什么对象不能在JavaScript中进行迭代?

为什么对象默认不能迭代? 我总是看到与迭代对象有关的问题,常见的解决scheme是迭代对象的属性,并以这种方式访问​​对象内的值。 这似乎很常见,这使我想知道为什么对象本身不可迭代。 像ES6 for…of这样的语句默认使用对象。 因为这些特性只适用于不包含{}对象的特殊“可迭代对象”,所以我们必须经过这些循环才能使这个对象成为我们想要使用的对象。 for …语句创build一个循环遍历可迭代对象 (包括Array,Map,Set,arguments object等)… 例如使用ES6 生成器function : var example = {a: {e: 'one', f: 'two'}, b: {g: 'three'}, c: {h: 'four', i: 'five'}}; function* entries(obj) { for (let key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of entries(example)) { console.log(key); console.log(value); for (let [key, […]

React.js ES6避免将“this”绑定到每个方法

最近,我开始修补React.js,我喜欢它。 我开始在常规的ES5中,以便弄清事情,这些文档都是用ES5编写的。 但是现在我想尝试ES6,因为它有光泽,新颖,而且似乎简化了一些东西。 我感到困扰的是,对于我添加到组件类中的每种方法,我现在都必须绑定“this”,否则它不起作用。 所以我的构造函数最终看起来像这样: constructor(props) { super(props); this.state = { …some initial state… } this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); this.someHandler = this.someHandler.bind(this); } 如果我要给class上添加更多的方法,这将会变得更大,更丑陋。 我的问题是,有没有办法解决这个问题,或者至less让它更容易,更短,更难看? 我想尝试使用ES6的一个主要原因是为了使我的代码更加简洁,但是正好相反。 任何build议或意见,将不胜感激。

Typescript es6导入模块“文件不是模块错误”

我用es6模块语法使用typescript 1.6。 我的文件是: test.ts: module App { export class SomeClass { getName(): string { return 'name'; } } } main.ts: import App from './test'; var a = new App.SomeClass(); 当我试图编译main.ts文件时,我得到这个错误: 错误TS2306:文件'test.ts'不是一个模块。 我怎么能做到这一点?

导入不能在PhpStorm中使用JavaScript

我试图运行一段JavaScript代码写在一个教程,看起来像这样: main.js import Vue from 'Vue'; import Alert from './components/Alert.vue'; new Vue({ el: 'body', components: { Alert } }) 但是,PhpStorm正在给出以下错误: 目前的JavaScript版本不支持导入声明 如何在PhpStorm中获得更新的(?)JavaScript版本? 这真的是这个问题吗?