Импорт webpack-экспортированной схемы mongoose

#node.js #webpack #mongoose #babeljs #babel-loader

#node.js #webpack #mongoose #babeljs #babel-загрузчик

Вопрос:

Я работаю между двумя пакетами. В первом я определяю схему mongoose (версия 5.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 и два плагина (object rest spread, react jsx).

Во втором пакете (a 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 реквизит:

Ошибка типа: не удается прочитать свойство ‘$__’ из undefined

Это происходит где-то в моих моделях с webpacked ( 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(eamp;amp;e.$isMongooseDocumentArray)continue}0===n.indexOf(e ".")amp;amp;(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}}),uamp;amp;"string"==typeof camp;amp;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 .

Итак, если я правильно понимаю, когда схема упаковывается в веб-пакет в моем первом пакете, она теряет что-то, что делает невозможным ее использование во втором пакете. Я попытался добавить параметры конфигурации webpack, перечисленные здесь, но результат тот же.

Могу ли я что-нибудь сделать, чтобы сделать мою схему доступной во втором пакете?