Я работаю между двумя пакетами. В первой я определяю схему мангуста (v5.4.19):
// src/models/index.js
import mongoose from 'mongoose/browser'
const mySchema = new mongoose.Schema({
name: String,
listOfThings: []
})
export default mySchema
Я встроил его в dist-файл, используя стандартную конфигурацию Webpack:
// webpack.config.js
const path = require('path')
module.exports = {
entry: {
components: './src/components/index.js',
models: './src/models/index.js',
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].js',
libraryTarget: 'commonjs2'
},
mode: "production",
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
}
}
],
},
};
и .babelrc
просто загружает предустановку env и два плагина (распространение покоя объекта, реагирует на jsx).
Во втором пакете (приложение Next.js) я импортирую эту схему:
// pages/index.js
import React from 'react'
import mongoose from 'mongoose/browser'
import mySchema from 'myfirstlib/dist/models'
/*
const myDuplicateSchema = new mongoose.Schema({
name: String,
listOfThings: []
})
*/
const myDoc = new mongoose.Document({
name: 'name',
listOfThings: []
}, mySchema)
export default () => <div></div>
Я получаю следующую ошибку, как только пытаюсь заполнить listOfThings
проп:
TypeError: Невозможно прочитать свойство '$ __' из неопределенного
Это происходит где-то в моих упакованных моделях (dist/models.js
):
691 | /*!
692 | * ignore
> 693 | */t.exports=function(t,e,n){const r=(n=n||{}).skipDocArrays;let i=0;for(const n of Object.keys(t.$__.activePaths.states.modify)){if(r){const e=t.schema.path(n);if(e&&e.$isMongooseDocumentArray)continue}0===n.indexOf(e+".")&&(delete t.$__.activePaths.states.modify[n],++i)}return i}},function(t,e,n){"use strict";
694 | /*!
695 | * Module dependencies.
696 | */const r=n(21).get().Binary,i=n(1),o=n(48).Buffer,s=o.from("").constructor.prototype;function a(t,e,n){let r,s,c,u,l;return r=0===arguments.length||null===arguments[0]||void 0===arguments[0]?0:t,Array.isArray(e)?(c=e[0],u=e[1]):s=e,l="number"==typeof r||r instanceof Number?o.alloc(r):o.from(r,s,n),i.decorate(l,a.mixin),l.isMongooseBuffer=!0,Object.defineProperties(l,{validators:{value:[],enumerable:!1},_path:{value:c,enumerable:!1},_parent:{value:u,enumerable:!1}}),u&&"string"==typeof c&&Object.defineProperty(l,"_schema",{value:u.schema.path(c)}),l._subtype=0,l}
- Работает нормально, если я не пытаюсь присвоить значение моему
listOfThings
.
- Это также работает нормально, если я инициализирую
myDoc
с myDuplicateSchema
вместо mySchema
(даже если listOfThings
- непустой массив).
- Я также могу инициализировать
myDoc
с new mongoose.Schema(courseSchema.obj)
Когда я console.log(mySchema, myDuplicateSchema)
они появляются как объекты JS с одинаковым содержимым, но с разными «типами» (я не уверен, что здесь используется правильное слово): первое печатается как $
, тогда как второй напечатан как Schema
.
Так что, если я правильно понимаю, когда Схема упакована в веб в моем первом пакете, она теряет что-то, что делает невозможным использование во втором пакете. Я попытался добавить параметры конфигурации веб-пакета, перечисленные здесь , но результат тот же.
Могу ли я сделать мою схему доступной во втором пакете?