首页 > 解决方案 > 用 babel 编译代码后,属性不存在

问题描述

我有一个位于 models/user.js 的文件,其内容如下:

import { mongoose } from '../index.js'

var userSchema = mongoose.Schema({
    email: String, // Self-explanatory
    password: String, // This will be a bcrypt hash
    name: String,
    verified: Boolean
})

export var User = mongoose.model('User', userSchema)

Babel 将其编译为 ES5,生成:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});
exports.User = undefined;

var _index = require('../index.js');

var userSchema = _index.mongoose.Schema({
    email: String, // Self-explanatory
    password: String, // This will be a bcrypt hash
    name: String,
    verified: Boolean
});

var User = exports.User = _index.mongoose.model('User', userSchema);

index.js,我有这个要求mongoose

export const mongoose = require('mongoose')

并且 Babel 将其转换为

var mongoose = exports.mongoose = require('mongoose');

这一切对我来说看起来都不错,但是每当我运行我的(通过 Babel 编译的)代码时,我都会收到一个错误消息,告诉我找不到 _index.mongoose.Schema,这没有意义,因为一切看起来都正确相关. index.js相对于 user.js 在正确的位置

真正奇怪的是,我有一种“项目模板”,我在创建我的项目类型时使用它,并且一切都可以编译(使用基本相同的代码)完全没问题。

有任何想法吗?

标签: javascriptnode.jsmongooseecmascript-6babeljs

解决方案


我无法解决最初的问题,但@NeilLunn 提供了一个很好的解决方法。无需尝试从 my 导入模块index.js,因为 Node 只评估一个模块一次,您可以在辅助文件中导入它(与您在 index.js 中所做的相同)。


推荐阅读