用babel编译代码后,属性不存在

时间:2018-06-11 04:33:29

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

我有一个位于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

的正确位置

真正奇怪的是我有一个"项目模板"我在创建项目类型时使用,并且所有内容编译(使用基本相同的代码)完全正常。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我无法解决最初的问题,但是@NeilLunn提供了一个很好的解决方法。而不是尝试从我的template <typename T> class C { public: C() { std::cout << "C constructed." << std::endl; std::cout << name() << std::endl;; } constexpr const char* name(); }; template <> constexpr const char * C<A>::name() { return "You got an A."; } template <> constexpr const char * C<B>::name() { return "You got a B."; } 导入模块,因为Node只撤消一次模块,你可以在辅助文件中导入它(与你在index.js中的操作相同)。