我已经看到ES6模块的公共出口有以下两种方式:
// method 1
export var getAnswer = function () { return 'forty two'; };
// method 2
export default function () { return 'forty two'; };
Run Code Online (Sandbox Code Playgroud)
我很惊讶我用googlefu找不到答案.我只关心ES6模块,不是 CommonJS,RequireJS,AMD,Node等.
我可以:
import * as foo from './foo'
Run Code Online (Sandbox Code Playgroud)
但似乎无法出口相同:
export * as foo from './foo'
Run Code Online (Sandbox Code Playgroud)
这似乎也不起作用......:
import * as fooImport from './foo';
export const foo = fooImport;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
---更新---
你想要实现什么目标?
基本上,我正在ngrx/store为我的应用程序实现后端.我想组织我的代码:
app/core/
index.ts
viewer/
index.ts
viewer-actions.ts
viewer-reducer.ts
view-data/
index.ts
view-data-actions.ts
view-data-reducer.ts
Run Code Online (Sandbox Code Playgroud)
我想用我的index.ts文件链接每个子集的所有导出(常见范例).
但是,我想保留命名空间.我的每个xxx-reducer.ts和xxx-actions.ts文件具有相同的名称(出口reducer,ActionTypes,Actions,...),所以正常的链接会导致名称冲突.我所试图做的是让所有从出口xxx-actions和xxx-reducer被再出口的xxx.这将允许我:
import { viewer, viewerData } from './core';
...
private viewer: Observable<viewer.Viewer>;
private viewData: Observable<viewData.ViewData>; …Run Code Online (Sandbox Code Playgroud) 在ES2015中,可以将整个模块导入为其属性为模块导出的对象:
import * as name from 'module';
Run Code Online (Sandbox Code Playgroud)
我发现这对于命名空间非常有用,并且一直使用它.
也可以重新导出其他模块的导出:
export { name } from 'module'; // selectively
export * from 'other-module'; // indiscriminately
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试用这种风格编写一个带有命名空间的库.在顶级模块中收集所有内容的直观方式如下:
export * as name from 'module';
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用; Babel和Rollup都拒绝了它.
我可以将模块作为对象导入,通过迭代其键来创建克隆,然后导出它,但它只是一个普通的旧动态对象,所以我将失去Rollup提供的巨大优势.
那么,使用声明性模块语法真的没办法做到这一点吗?在我看来,没有任何借口.
有导入语法:
import * as foo from 'bar';
Run Code Online (Sandbox Code Playgroud)
我同样尝试过:
export * as foo from 'bar';
Run Code Online (Sandbox Code Playgroud)
但这引发了错误:
Run Code Online (Sandbox Code Playgroud)ERROR in src/app/@theme/components/aComp/aComp.loader.ts(1,10): error TS1005: 'from' expected. src/app/@theme/components/aComp/aComp.loader.ts(1,13): error TS1005: ';' expected. src/app/@theme/components/aComp/aComp.loader.ts(1,17): error TS1005: ';' expected. src/app/@theme/components/aComp/aComp.loader.ts(1,22): error TS1005: ';' expected.
还有导出语法:
export { default as foo } from 'bar';
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点而*不是default?
(仅供参考,我试图require从声明中删除):
export const foo = require('bar');
Run Code Online (Sandbox Code Playgroud)
ng serve运行时抛出以下错误,包括.ts上述内容:
Run Code Online (Sandbox Code Playgroud)ERROR in src/app/@theme/components/aComp/aComp.loader.ts(6,20): error TS2304: Cannot find name 'require'.