导入Webpack导出的猫鼬模式

时间:2019-03-26 18:33:53

标签: node.js webpack mongoose babeljs babel-loader

我正在两个软件包之间工作。在第一个中,我定义了一个猫鼬(v5.4.19)模式:

// src/models/index.js
import mongoose from 'mongoose/browser'

const mySchema = new mongoose.Schema({
  name: String,
  listOfThings: []
})
export default mySchema

我使用标准的Webpack配置将其构建到dist文件中:

// 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对象出现(我不确定此处是否使用正确的单词):第一个被打印为{{ 1}},而第二个则打印为$

因此,如果我理解正确,当将模式打包到第一个程序包中时,它将丢失某些内容,从而无法在第二个程序包中使用。我尝试添加列出的here的webpack配置选项,但结果是相同的。

我可以做些什么使我的Schema在第二个软件包中可用吗?

0 个答案:

没有答案