我有一个带有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替换为'/'
,但它不起作用。
答案 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