【发布时间】: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