Sequelize:找不到模块(型号)

时间:2018-01-28 11:06:07

标签: javascript sequelize.js

我有一个带有Sequelize和Webpack的Node环境。

这是Webpack生成构建的路径:

./bin/builds.js

这是我使用Sequelize CLI创建模型的路径:

./src/models

在此文件夹中有我的模型和包含Sequelize生成的脚本的索引文件。这个脚本获取所有模型并导出它们,但在我的情况下它不起作用。

这是错误:

Error: Cannot find module '/Library/WebServer/Documents/private/my-project/bin/src/models/currency.js'

当模型位于/bin/时,脚本会尝试在构建路径(/my-project/src)中获取模型。

我通过编辑 index.js

中的下面一行来解决这个问题

var model = sequelize['import'](path.join(__dirname, file));

分为:

var model = sequelize['import'](path.join('../'+__dirname, file));

但是我想找到一种更好的方法来修复它,因为通过修复index.js我认为这个bug会再次发生在其他文件上。

这是我的webpack配置:

const webpack = require('webpack');
const path = require('path');
const fs = require('fs');
const nodeModules = {};


 fs.readdirSync(path.resolve(__dirname, 'node_modules'))
     .filter(function(x) {
         return ['.bin'].indexOf(x) === -1;
     })
     .forEach(function(mod) {
         nodeModules[mod] = 'commonjs ' + mod;
     });

module.exports =

    {
        name: 'server',
        target: 'node',
        entry: './app.js',
        output: {
            path: __dirname+'/bin/',
            publicPath: '/',
            filename: 'server.js'
        },
        node: {
            __filename: true,
            __dirname: true
        },
        externals: [nodeModules],
        module: {
            loaders: [
                { test: /\.js$/,
                    loaders: [
                        'babel-loader'
                    ]
                },
                { test:  /\.json$/, loader: 'json-loader' },
            ]
        }
    };

NB:我已尝试将publicPath替换为'/',但它不起作用。

1 个答案:

答案 0 :(得分:1)

我遇到同样的问题,我的解决方案是手动将模型导入index.js

'use strict'

var Sequelize = require('sequelize')
var env = process.env.NODE_ENV || 'development'
var config = require(__dirname + '/../config/config.json')[env]
var db = {}

if (config.use_env_variable) {
  var sequelize = new Sequelize(process.env[config.use_env_variable], config)
} else {
  var sequelize = new Sequelize(config.database, config.username, config.password, config)
}

const models = [
  require('./Person')(sequelize, Sequelize),
  require('./Animal')(sequelize, Sequelize)
]
models.forEach(model => {
  db[model.name] = model
})

models.forEach(model => {
  if (db[model.name].associate) {
    console.log('entered', model.name)
    db[model.name].associate(db)
  }
})

db.sequelize = sequelize
db.Sequelize = Sequelize

module.exports = db