【问题标题】:ES6 Imports inside Export defaultES6 Imports里面的Export default
【发布时间】:2018-04-11 19:21:42
【问题描述】:

我目前正在将 NodeJS 应用程序的整个代码从 ES5 迁移到 ES6/7。

我在导入时遇到了麻烦:

首先,我了解到直接调用文件进行导入。例如:

import moduleTest from './moduleTest';

这段代码将进入moduleTest.js并执行。

所以,真正的问题是关于这段代码:

import mongoose from 'mongoose';
import autopopulate from 'mongoose-autopopulate';
import dp from 'mongoose-deep-populate';

import { someUtils } from '../utils';

const types = mongoose.Schema.Types;
const deepPopulate = dp(mongoose);

export default () => {
    // DOES SOMETHING USING types AND deepPopulate
    return someThing;
};

export const anotherModule = () => {
  // ALSO USE types and deepPopulate
};

在两个导出之外声明 types 和 deepPopulate 是一种好习惯吗?还是我应该在每次导出时声明它们?

这个问题的原因是我因为这种做法而发生了冲突(为了简化,假设dp(mongoose) 将调用尚未声明的东西)

【问题讨论】:

  • 我只看到一个模块。整个文件就是模块。 export default ... 和 export const anotherModule ... 不是模块,它们是导出。让模块中的多个函数共享模块级变量是完全可以的。如果您不告诉我们具体问题,我认为我们无法帮助您解决具体问题。
  • 不确定“在两个模块之外声明”是什么意思?
  • 我的意思是在两个exports之外,也就是说如果我导入这个文件,那么这两个exports之外的所有东西都会被执行,这对我来说是个问题
  • 那actual problem到底是什么?
  • 嗯,问题是我用 Node 执行的文件正在通过它的代码构建一个 Mongo 模式,并在以后使用它。不幸的是,这个文件(上面的代码)中的导入使用了一个尚不可用的架构(因为主文件中的代码还没有完成它的工作)所以我收到一个错误,告诉我找不到架构。

标签: javascript node.js mongoose ecmascript-6 babeljs


【解决方案1】:

一个模块只能有一个“默认”导出,或者每个模块可以有多个“命名”导出。请看以下关于在 ES6 中处理导出的详细说明:ECMAScript 6 Modules: The Final Syntax

【讨论】:

  • 感谢您的链接,我刚刚浏览了它,它真的很有帮助!经过深思熟虑,我想我会在每个导出中声明types 和deepPopulate,因为如果我让它们在顶部会发生冲突,因为它们将在导入此文件时执行。有这些重复的代码很令人不安,但就这样吧!
猜你喜欢
  • 2016-02-10
  • 2017-03-10
  • 2017-01-09
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多