标签: es6-module-loader

如何在ES6中获取类函数的引用?

对不起,如果问题太简单了,但我在这里遗漏了一些东西.刚刚切换了一个看起来像的ES5模块:

module.exports = {
  func1: function(a, b) {...},
  func2: function(a, b) {...}
};
Run Code Online (Sandbox Code Playgroud)

对于看起来像这样的ES6类:

export default class {
  func1(a, b) {...}
  func2(a, b) {...}
}
Run Code Online (Sandbox Code Playgroud)

一切都很好:在这两种情况下我都可以export mod from 'module';并且打电话mod.func1(a, b)mod.func2(a, b).

但是,我有一个函数可以调用模块函数来调用:

var caller = function(func, val1, val2) {
  let a = something(val1);
  let b = something(val2);
  return func(a, b);
};
Run Code Online (Sandbox Code Playgroud)

当我打电话时,caller(mod.func1, x, y)我得到了第一个实现所需的结果,但是undefined is not a function第二个实现了.

在两种情况下都打印出mod.func1返回值[Function],但显然从ES6类返回了其他内容.

我做错了什么,如何获得我可以在另一个函数中调用的类函数?

更新:使用第二个实现,我忘了添加实例化代码:

import Mod from 'module'; …
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-6 es6-module-loader

8
推荐指数
1
解决办法
9049
查看次数

es6模块如何导入自己?

我有一个名为的模块fooModule.在这个模块中,我导入fooModule(本身):

import * as fooModule from './fooModule';

export function logFoo() {
  console.log(fooModule)
}
Run Code Online (Sandbox Code Playgroud)

logFoo()被调用时,我可以看到所有的fooModule的出口.这是如何运作的?

javascript ecmascript-6 webpack es6-module-loader

8
推荐指数
1
解决办法
1162
查看次数

如何在index.js桶中导出默认模块

我正在尝试使用index.js桶导出默认模块,但似乎无法使其工作.它适用于命名导出,但不适用于默认导出.

简化的项目结构

/hellos
  /components
    Hello.js
    Hellos.js
    index.js
  index.js
App.js
Run Code Online (Sandbox Code Playgroud)

/hellos/component/Hellos.js

...
export default Hellos
Run Code Online (Sandbox Code Playgroud)

/hellos/component/index.js

export * from './Hello';
export * from './Hellos';
Run Code Online (Sandbox Code Playgroud)

/hellos/index.js

export * from './components'
export * from './actions'
export * from './constants'
export * from './reducers'
Run Code Online (Sandbox Code Playgroud)

App.js

import Hellos from './hellos'
console.log(Hellos) // <- undefined
Run Code Online (Sandbox Code Playgroud)

上面导入的Hellos模块始终未定义.

我可以使用命名导出或App.js中的直接导入来使用它,import Hellos from './hellos/component/Hellos'但我认为这是一种不好的做法,只是希望使用import Hellos from '/hellos'.

我怀疑问题出在index.js桶上,但我无法解决问题.请帮忙.

javascript es6-module-loader es6-modules

8
推荐指数
1
解决办法
4719
查看次数

将依赖项注入ES2015模块

是否可以像ES#或其他编程语言一样将依赖注入ES2015模块?如果我导入一个模块,我会为它创建一个硬依赖项,并且以后不能在运行时更改它.例如,我有以下JavaScript代码:

import Animal from './dog';

class Person {
  feedAnimal() {
    new Animal().feed();
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在导入狗模块.但是,如果我想把它改成猫呢?目前我必须手动修改第1行,但在某些情况下我希望它可以从外部进行配置,以便在某些情况下应该有一只猫,在某些其他条件下它应该是猫.所有可以通过经典依赖注入完成的事情.

我知道有一些DI框架存在像,电解质,电线等可惜大多需要一些特殊的语法,并没有对由ES2015模块.

javascript dependency-injection ecmascript-6 es6-module-loader

7
推荐指数
1
解决办法
2846
查看次数

在ASP.NET MVC中运行时捆绑ES6模块

是否有任何现有的ES6模块运行时捆绑解决方案?

我希望在MVC5 Web应用程序中简化JavaScript代码开发.我们遇到了大型,笨拙的JS文件的问题,所以我希望得到一个模块加载器系统.到目前为止,我没有为ES6或其他模块加载器格式找到任何现有的bundle变换器.我可以使用TypeScript或nodejs require样式.但我不想使用require.js样式.

也许有一个很好的理由这个解决方案不存在.对于运行时捆绑解决方案,依赖解析处理可能过多.但是,我认为值得一试.

考虑的解决方案

预建的Web客户端

最终,这是我想要的,但我现在需要一个止损解决方案.我知道如何使用grunt/gulp/webpack为HTML客户端组建一个构建系统.但我不想webpack -w在开发期间告诉开发人员运行或类似的东西.我也不想告诉他们为每次JS变更重建解决方案.他们应该能够修改文件,刷新浏览器,并查看更改.

目录结构

这是我最终可能会走的路线.基本上,这个JS代码库由jQuery小部件和普通JS(帮助器/公共函数)组成.所以,如果我在这个目录结构中构造代码并包含js dir,它应该让我大部分时间都在那里:

  • js(DIR)
    • APP-start.js
      • 助手(DIR)
      • 小部件(DIR)

小部件应该没问题.帮助者,我可以看到一个函数/类依赖于另一个函数/类的问题.虽然,因为函数调用永远不应该以帮助程序(只是一个小部件)开始,所以这应该可以正常工作,假设没有使用全局变量(或者可能是一个像'App'这样的全局变量).

asp.net-mvc-5 asp.net-bundling es6-module-loader

7
推荐指数
0
解决办法
1043
查看次数

ES6默认和命名导出

我想了解命名和默认导出.我有一个看似基本的要求,我不明白如何设置.

我希望能够同时导入:

//app.js
import Mod from './my-module'
import { funcA, funcB } from './my-module'

console.log('A', Mod.funcA(), funcA()); // A a a
console.log('B', Mod.funcB(), funcB()); // A a a
Run Code Online (Sandbox Code Playgroud)

当我尝试时,我最接近的方法是:

//my-module.js
export function funcA() { return 'a'; };
export function funcB() { return 'b'; };

export default {funcA, funcB}
Run Code Online (Sandbox Code Playgroud)

我的麻烦是我不想重新索引默认导出中的每个函数.我只是想定义我的函数,然后确保它们被导出,所以我可以使用它们.

建议?或者我必须使用import * as Mod from './my-module';

javascript export ecmascript-6 es6-module-loader

7
推荐指数
2
解决办法
4003
查看次数

es6导入作为只读视图的理解

对于es6导入和导出的确切内容,没有任何明确的解释.有人将导入描述为只读视图.检查以下代码:

// lib/counter.js
export let counter = 1;

export function increment() {
  counter++;
}

export function decrement() {
  counter--;
}


// src/main.js
import * as counter from '../../counter';

console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果两个模块导入相同的计数器模块并且第一个模块递增计数器,第二个模块是否也会看到计数器递增?"进口"和"出口"做什么?在什么上下文中执行增量函数?什么是增量函数的变量对象?

// lib/counter.js
export let counter = 1;

export function increment() {
  counter++;
}

export function decrement() {
  counter--;
}


// src/main1.js
import * as counter from '../../counter';

console.log(counter.counter); // 1
counter.increment();
console..log(counter.counter); // 2


// src/main2.js
import * as counter from '../../counter';
console.log(counter.counter); // …
Run Code Online (Sandbox Code Playgroud)

ecmascript-6 es6-module-loader

7
推荐指数
2
解决办法
2558
查看次数

es6模块原生支持

我了解ES6模块规范,问题在于它的支持.AFAIK,没有本机实现此功能的浏览器(请参阅此处的浏览器兼容性 ).有几个问题:

  • 显然,ES6模块是ES6功能.当我查看kangax兼容性表时,我根本没有看到这样的行(对于ES6模块),为什么会这样?这是ES6的一个功能...
  • 因此,现在使用ES6的唯一方法是使用构建工具,例如babel,browserify或任何其他替代品,对吧?
  • 当它们被本机支持时,如何从浏览器中调用异步AJAX来获取模块?

javascript ecmascript-6 es6-module-loader

7
推荐指数
1
解决办法
670
查看次数

JavaScript - 如何使 ES6 导入在浏览器中工作?

我正在开始一个新项目,我想要在其中使用 ES6 样式模块,但是,我无法让它在浏览器中运行。我正在使用 Chrome。

我将问题隔离在很少的代码行中。

这是我的 2 个 TypeScript 文件:

应用程序

import { Component } from './component';

var component: Component = new Component();
Run Code Online (Sandbox Code Playgroud)

组件.ts

export class Component {

}
Run Code Online (Sandbox Code Playgroud)

以下是它们编译为 JavaScript 的方式:

应用程序.js

import { Component } from './component';
var component = new Component();
Run Code Online (Sandbox Code Playgroud)

组件.js

export class Component {
}
Run Code Online (Sandbox Code Playgroud)

我的 index.html 只包含一个脚本标签。我尝试了一些变体,但没有一个奏效。

index.html #1

<script src="src/app.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

未加载脚本。(网络选项卡中没有请求)

index.html #2

<script src="src/app.js" type=module></script>
Run Code Online (Sandbox Code Playgroud)

未加载脚本。(网络选项卡中没有请求)

index.html #3

<script src="src/app.js"></script>
Run Code Online (Sandbox Code Playgroud)

未捕获的语法错误:意外的标记 {

我正在使用 tsc 通过 Visual Studio Code 转译 TypeScript。

任务文件 …

javascript ecmascript-6 es6-module-loader es6-modules

7
推荐指数
1
解决办法
4184
查看次数

javascript:修改导入的“变量”会导致“分配给常量变量”,即使它不是常量

我有两个文件,file1 导出一个变量“不是常量” var x=1 和 file2 从中导入这个变量

问题是我无法修改导入的变量,即使它不是常量!

文件1.js

export var x=1 //it is defined as a variable not a constant
Run Code Online (Sandbox Code Playgroud)

文件2.js

import {x} from 'file1.js'
console.log(x) //1
x=2 //Error: Assignment to constant variable
Run Code Online (Sandbox Code Playgroud)

javascript node.js ecmascript-6 es6-module-loader es6-modules

7
推荐指数
1
解决办法
1168
查看次数