首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webpack捆绑后如何解析迁移文件夹路径

webpack捆绑后如何解析迁移文件夹路径
EN

Stack Overflow用户
提问于 2019-09-06 14:04:44
回答 1查看 898关注 0票数 2

我需要传递给Umzug配置,一个迁移文件夹的路径,但是它被webpack压缩了,可以吗?

我尝试将每个迁移文件分别打包,但是Umzug说它找不到方法up()

代码语言:javascript
复制
    let umzug = new Umzug({
      storage: 'sequelize',

      storageOptions: {
        sequelize: sequelize
      },

      migrations: {
        params: [
          sequelize.getQueryInterface(),
          Sequelize
        ],
        path: './../db/migrations/*')
      }
    })

当我尝试手动运行它们时,只是从webpack编译出来的,意思是没有方法up()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-14 23:26:45

自从你在7个月前提出这个问题以来,我可能已经晚了一点,但我只是遇到了同样的问题,所以我想我会发布我的解决方案。

我通过为每次迁移在Webpack中创建一个入口点来解决这个问题。我使用glob动态获取文件,然后将它们附加到entrypoint参数中,使用文件名作为entrypoint名称。

然后,在output.filename函数中,我检查前面列表中的任何入口点。然后,在migrations目录中创建这些入口点文件,以使它们远离其余的入口点文件,这样您的迁移器就不会试图对它们进行迭代。

webpack.config.js

代码语言:javascript
复制
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,只需指定迁移目录路径

代码语言:javascript
复制
let umzug = new Umzug({
    storage: 'sequelize',

    storageOptions: {
        sequelize: sequelize
    },

    migrations: {
        params: [
            sequelize.getQueryInterface(),
            Sequelize
        ],
        path: path.join(__dirname, 'migrations')
    }
})

我相信有一个更好的解决方案,但这一个花了我更长的时间,我愿意承认和解决我的所有问题,所以我结束了我的搜索。希望这能帮上忙。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57823560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档