bgr*_*11n 2 sequelize.js typescript webpack umzug
我需要将迁移文件夹的路径传递给 Umzug 配置,但它正在被 webpack 压缩,这可以吗?
我尝试单独捆绑每个迁移文件,但 Umzug 说它找不到 method up()。
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: './../db/migrations/*')
}
})
Run Code Online (Sandbox Code Playgroud)
当我尝试手动运行从 webpack 编译的它们时,它说 no method up()。
小智 5
自从你 7 个月前问这个问题以来,我可能来晚了一点,但我刚刚遇到了同样的问题,所以我想我会发布我的解决方案。
我通过在 Webpack 中为每次迁移创建一个入口点来解决这个问题。我曾经glob动态获取文件,然后将它们附加到入口点参数,使用文件名作为入口点名称。
然后在output.filename函数中,我检查之前列表中的任何入口点。然后在一个目录中创建这些入口点文件migrations,以将它们干净地放置在我的其余入口点文件之外,以便您的迁移器也不会尝试迭代它们。
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';
},
},
}
Run Code Online (Sandbox Code Playgroud)
现在,您的所有迁移都应该可以作为目录.js中的文件直接访问/dist/migrations。
现在加载 Umzug 时,您只需指定迁移目录路径即可
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: path.join(__dirname, 'migrations')
}
})
Run Code Online (Sandbox Code Playgroud)
我确信有更好的解决方案,但是这个解决方案花了我比我愿意承认的更长的时间,并解决了我所有的问题,所以这就是我结束搜索的地方。希望这对某人有帮助。
| 归档时间: |
|
| 查看次数: |
1408 次 |
| 最近记录: |