webpack 捆绑后如何解析迁移文件夹的路径
How to resolve path to migrations folder after webpack bundling
我需要将迁移文件夹的路径传递给 Umzug 配置,但它正在被 webpack 压缩,可以这样做吗?
我试图分别捆绑每个迁移文件,但 Umzug 说它找不到方法 up()
。
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: './../db/migrations/*')
}
})
当我尝试 运行 它们只是从 webpack 手动编译时,它说没有方法 up()
。
自从你 7 个月前问过这个问题以来,我参加聚会可能有点晚了,但我刚刚遇到了同样的问题,所以我想 post 我的解决方案。
我通过在 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';
},
},
}
现在,您的所有迁移都可以作为 /dist/migrations
目录中的 .js
文件直接访问。
现在加载Umzug,只需指定迁移目录路径即可
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: path.join(__dirname, 'migrations')
}
})
我确信有更好的解决方案,但这个解决方案花费的时间比我愿意承认的要长,而且它解决了我所有的问题,所以我的搜索就此结束。希望这对某人有所帮助。
我需要将迁移文件夹的路径传递给 Umzug 配置,但它正在被 webpack 压缩,可以这样做吗?
我试图分别捆绑每个迁移文件,但 Umzug 说它找不到方法 up()
。
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: './../db/migrations/*')
}
})
当我尝试 运行 它们只是从 webpack 手动编译时,它说没有方法 up()
。
自从你 7 个月前问过这个问题以来,我参加聚会可能有点晚了,但我刚刚遇到了同样的问题,所以我想 post 我的解决方案。
我通过在 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';
},
},
}
现在,您的所有迁移都可以作为 /dist/migrations
目录中的 .js
文件直接访问。
现在加载Umzug,只需指定迁移目录路径即可
let umzug = new Umzug({
storage: 'sequelize',
storageOptions: {
sequelize: sequelize
},
migrations: {
params: [
sequelize.getQueryInterface(),
Sequelize
],
path: path.join(__dirname, 'migrations')
}
})
我确信有更好的解决方案,但这个解决方案花费的时间比我愿意承认的要长,而且它解决了我所有的问题,所以我的搜索就此结束。希望这对某人有所帮助。