javascript - 用 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 在正确的位置
真正奇怪的是,我有一种“项目模板”,我在创建我的项目类型时使用它,并且一切都可以编译(使用基本相同的代码)完全没问题。
有任何想法吗?
解决方案
我无法解决最初的问题,但@NeilLunn 提供了一个很好的解决方法。无需尝试从 my 导入模块index.js
,因为 Node 只评估一个模块一次,您可以在辅助文件中导入它(与您在 index.js 中所做的相同)。
推荐阅读
- c++ - 我使用静态库在 C++ Visual Studio 2019 中构建了一个 OpenCV 项目,但在运行时仍需要 dll 文件
- azure - 第一方应用程序可以调用 Graph API 以外的 API 吗?
- python - Scrapy 中的 XML 导出器 serialize_field
- c# - 将带有字符串参数的动作传递给没有它的方法
- c++ - 有没有办法从整数中获取模板类型?
- java - 如何用缺失的整数替换 ArrayList 中的重复整数
- wordpress - 在woocommerce中更改商店页面的HTML标签
- c++ - 初始化地图被报告为空的奇怪行为
- sql-server - 在关键字“UNION”和“Top”附近调整不正确的语法
- c++ - C++一个类使用其他类