【问题标题】:Different directories for seed data using sequelize使用 sequelize 的种子数据的不同目录
【发布时间】:2018-12-04 21:23:14
【问题描述】:

我希望在开发和生产之间有不同的种子数据。如何在配置中指定它?我知道在.sequelizerc 中我可以加载动态配置文件并指定seeders-path

// .sequelizerc
const path = require('path')

module.exports = {
  "config": path.resolve('./app/config', 'config.json'),
   "models-path": path.resolve('./app/models'),
   "migrations-path": path.resolve('./app/migrations')
   "seeders-path": path.resolve('./app/seeders')
}

还有配置

// ./app/config/config.json
{
  "development": {
     // environment specific configuration
     ...

是否可以在动态配置中选择seeders-path?或者我应该做一些逻辑,比如

"seeders-path": process.env.NODE_ENV === 'development'? 
  "seeders/development" :
  "seeders/production"

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    你可以像这样使用 npm 脚本:

    // package.json
    "scripts": { 
        "sequelize:prod": "sequelize $* --seeders-path seeders/production", 
        "sequelize:dev": "sequelize $* --seeders-path seeders/development",
    }
    

    或者你可以像这样直接传递配置:

    // package.json
    "scripts": {
        "sequelize:dev": "sequelize $* --config some/path/dev.js"
        "sequelize:prod": "sequelize $* --config some/path/prod.js"
    }
    

    你可以传递给sequelize的选项列表:

    1. --env string 运行命令的环境
    2. --config string 配置文件的路径
    3. --options-path string 带有附加选项的 JSON 文件的路径
    4. --migrations-pat 字符串迁移文件夹的路径
    5. --seeders-path string 种子文件夹的路径
    6. --models-path 字符串 模型文件夹的路径
    7. --url string 要使用的数据库连接字符串。替代使用 --config 文件
    8. --debug bolean 可用时显示各种调试信息 boolean

    在 sequelize-cli 源码中有这个代码link:

    function loadRCFile(optionsPath) {
    
    
    const rcFile = optionsPath || path.resolve(process.cwd(), '.sequelizerc');
      const rcFileResolved = path.resolve(rcFile);
      return fs.existsSync(rcFileResolved)
        ? JSON.parse(JSON.stringify(require(rcFileResolved)))
        : {};
    }
    
    const args = yargs
      .config(loadRCFile(yargs.argv.optionsPath));
    

    因此您可以加载不同的文件,例如“.sequelizerc”:

    // package.json
    "scripts": {
        "sequelize:dev": "sequelize $* --options-path some/path/dev.js"
        "sequelize:prod": "sequelize $* --options-path some/path/prod.js"
    }
    
    // some/path/dev.js
    const path = require('path');
    
    module.exports = {
       "config": path.resolve('./app/config', 'config.json'),
       "models-path": path.resolve('./app/models'),
       "migrations-path": path.resolve('./app/migrations')
       // here your development path to seeders
       "seeders-path": path.resolve('./app/seeders/development')
    }
    
    // some/path/prod.js
    const path = require('path');
    
    module.exports = {
       "config": path.resolve('./app/config', 'config.json'),
       "models-path": path.resolve('./app/models'),
       "migrations-path": path.resolve('./app/migrations')
       // here your development path to seeders
       "seeders-path": path.resolve('./app/seeders/production')
    }
    

    但是你可以在一个种子目录中为不同的 ENV 创建种子。

    比方说,我们有 .sequelizerc

    // .sequelizerc
    const path = require('path')
    
    module.exports = {
       "config": path.resolve('./app/config', 'config.json'),
       "models-path": path.resolve('./app/models'),
       "migrations-path": path.resolve('./app/migrations')
       "seeders-path": path.resolve('./app/seeders')
    }
    

    创建播种机:

    sequelize seed:generate --name create_users-dev.js
    sequelize seed:generate --name create_users-prod.js
    sequelize seed:generate --name create_users-whatever.js
    

    而且我们只运行开发播种机:

    sequelize db:seed --seed `basename $(ls app/seeders/*-dev.js)`
    

    或产品播种机:

    sequelize db:seed --seed `basename $(ls app/seeders/*-prod.js)`
    

    或者只是用户开发播种者

    sequelize db:seed --seed `basename $(ls app/seeders/*users-dev.js)`
    

    您可以选择要运行的播种机。

    格式:

    sequelize db:seed --seed <array>
    sequelize db:seed --seed file1 file2 fileN
    

    【讨论】:

    • 你能解释一下你说“在源中有这个代码:”的区域吗?这段代码在典型的 Node 应用程序中的什么位置?
    • @G.Deward 我的意思是 sequelize-cli 来源see here
    • 我来这里是为了在开发环境中选择性地运行其他播种器,而无需指定完全不同的播种器路径。我不想为每个生产播种器都有重复的副​​本(或符号链接),并且我不想在提示符处指定每个播种器文件。
    【解决方案2】:

    这里我使用下面的命令来执行 Sequelize 的种子文件夹中的特定文件。

    命令:- sequelize db:seed --seed [种子文件名]

    喜欢:-

    示例:- sequelize db:seed --seed 20181204125705-executiveholds

    【讨论】:

    • 我不明白为什么 Sequelize 不将此添加到其文档中。谢谢大佬。
    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2017-12-25
    • 2018-05-28
    • 2018-06-02
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    相关资源
    最近更新 更多