Dan*_*van 1 node.js sequelize.js
我想在开发和生产之间使用不同的种子数据。如何在配置中指定?我知道,.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')
}
Run Code Online (Sandbox Code Playgroud)
和配置
// ./app/config/config.json
{
"development": {
// environment specific configuration
...
Run Code Online (Sandbox Code Playgroud)
是否可以seeders-path在动态配置中选择?还是我应该做出一些逻辑
"seeders-path": process.env.NODE_ENV === 'development'?
"seeders/development" :
"seeders/production"
Run Code Online (Sandbox Code Playgroud)
您可以使用npm脚本,如下所示:
// package.json
"scripts": {
"sequelize:prod": "sequelize $* --seeders-path seeders/production",
"sequelize:dev": "sequelize $* --seeders-path seeders/development",
}
Run Code Online (Sandbox Code Playgroud)
或者您可以像这样直接传递配置:
// package.json
"scripts": {
"sequelize:dev": "sequelize $* --config some/path/dev.js"
"sequelize:prod": "sequelize $* --config some/path/prod.js"
}
Run Code Online (Sandbox Code Playgroud)
您可以传递以进行序列化的选项列表:
在sequelize-cli中,源代码具有以下代码链接:
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));
Run Code Online (Sandbox Code Playgroud)
因此,您可以加载“ .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')
}
Run Code Online (Sandbox Code Playgroud)
但是您可以在一个种子目录中为不同的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')
}
Run Code Online (Sandbox Code Playgroud)
创建播种机:
sequelize seed:generate --name create_users-dev.js
sequelize seed:generate --name create_users-prod.js
sequelize seed:generate --name create_users-whatever.js
Run Code Online (Sandbox Code Playgroud)
我们只运行dev播种机:
sequelize db:seed --seed `basename $(ls app/seeders/*-dev.js)`
Run Code Online (Sandbox Code Playgroud)
或产品播种机:
sequelize db:seed --seed `basename $(ls app/seeders/*-prod.js)`
Run Code Online (Sandbox Code Playgroud)
或只是用户开发播种机
sequelize db:seed --seed `basename $(ls app/seeders/*users-dev.js)`
Run Code Online (Sandbox Code Playgroud)
您可以选择要运行的播种机。
格式:
sequelize db:seed --seed <array>
sequelize db:seed --seed file1 file2 fileN
Run Code Online (Sandbox Code Playgroud)