自从你 7 个月前问过这个问题以来,我可能迟到了一点,但我刚刚遇到了同样的问题,所以我想我会发布我的解决方案。
我通过在 Webpack 中为每次迁移创建一个入口点来解决这个问题。我曾经glob
动态地获取文件,然后将它们附加到入口点参数,使用文件名作为入口点名称。
然后在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')
}
})
我确信那里有更好的解决方案,但是这个解决方案花费的时间比我想承认的要长,并且解决了我所有的问题,所以这就是我结束搜索的地方。希望这可以帮助某人。