我需要传递给Umzug配置,一个迁移文件夹的路径,但是它被webpack压缩了,可以吗?
我尝试将每个迁移文件分别打包,但是Umzug说它找不到方法up()。
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: './../db/migrations/*')
}
})当我尝试手动运行它们时,只是从webpack编译出来的,意思是没有方法up()。
发布于 2020-04-14 23:26:45
自从你在7个月前提出这个问题以来,我可能已经晚了一点,但我只是遇到了同样的问题,所以我想我会发布我的解决方案。
我通过为每次迁移在Webpack中创建一个入口点来解决这个问题。我使用glob动态获取文件,然后将它们附加到entrypoint参数中,使用文件名作为entrypoint名称。
然后,在output.filename函数中,我检查前面列表中的任何入口点。然后,在migrations目录中创建这些入口点文件,以使它们远离其余的入口点文件,这样您的迁移器就不会试图对它们进行迭代。
webpack.config.js
const migrationFiles = glob.sync('./src/migrations/*');
const migrationEntries = migrationFiles.reduce((acc, migrationFile) => {
const entryName = migrationFile.substring(
migrationFile.lastIndexOf('/') + 1,
migrationFile.lastIndexOf('.')
);
acc[entryName] = migrationFile;
return acc;
}, {});
modules.exports {
entry: {
index: './src/index.ts',
...migrationEntries,
},
...
output: {
libraryTarget: 'commonjs',
filename: chunkData => {
if (Object.keys(migrationEntries).includes(chunkData.chunk.id)) {
return `migrations/${chunkData.chunk.id}.js`;
}
return '[name].js';
},
},
}现在,您的所有迁移都应该可以作为.js目录中的一个/dist/migrations文件直接访问。
现在,要加载Umzug,只需指定迁移目录路径
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: path.join(__dirname, 'migrations')
}
})我相信有一个更好的解决方案,但这一个花了我更长的时间,我愿意承认和解决我的所有问题,所以我结束了我的搜索。希望这能帮上忙。
https://stackoverflow.com/questions/57823560
复制相似问题