node.js - 如何替换文件(或多个文件)中的多行?

标签 node.js sequelize.js sequelize-cli

我最喜欢的实用程序之一 sequelize 将自动从数据库生成模型。但是,它并不总是识别主键上的自动递增函数。这会导致模型有时会生成错误并导致插入时出错。如何搜索主键的行并将这些行替换为正确的行(具有 autoIncrement 标志)?

例如,这...

    id: {
      type: DataTypes.INTEGER.UNSIGNED,
      allowNull: false,
      primaryKey: true
    },

……需要变成,这……
    id: {
      type: DataTypes.INTEGER.UNSIGNED, 
      autoIncrement: true, 
      primaryKey: true 
    },

我过去曾尝试使用 sed,但在间距、多行语法和记住命令结构方面遇到了问题。

最佳答案

我创建了一个名为 file-line-replacer 的实用程序来解决这个问题。它是为 Node 编写的,所以只要你在 Mac/Linux/Windows 机器上安装了 Node,你就可以毫无问题地使用它。

首先,安装它(我更喜欢全局安装)...
npm i -g file-line-replacer
...然后,只需运行一个命令(这个例子是针对上面的 Sequelize 问题)...

file-line-replacer \
  --search-dir "/Users/flackey/my-project/src/data/models" \
  --backup-dir "/Users/flackey/my-project/_backup" \
  --old-lines "allowNull: false,|primaryKey: true" \
  --new-lines "autoIncrement: true,|primaryKey: true" \
  --overwrite

上面的命令将匹配整个 BLOCKS 行。所以,在这个例子中,primaryKey: true 行确保它定位到正确的区域。然后它将用 --old-lines 中的文本块替换 --new-lines 中的文本块并且,因为提供了 --backup-dir,它将在修改原始文件之前创建每个文件的备份。

Note: The default delimiter for lines is | (pipe), however you can select your own delemiter by passing in --delimiter, to set globally, or --old-lines-delimiter / --new-lines-delimiter to set it for that specific block of lines (in case you need to actually search for or replace lines having the default delimiter).



项目页面上列出了大量其他选项:https://github.com/FredLackey/file-line-replacer

关于node.js - 如何替换文件(或多个文件)中的多行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61504688/

相关文章:

javascript - Sequelize 抛出 ER_CANT_CREATE_TABLE : Can't create table 'SequelizeMeta' (errno: 30)

node.js - 编译 Node 模块时 typescript 错误

sql - 使用限制的 Sequelize 分页需要 4 倍的时间来加载。我该如何优化?

sequelize.js - 你如何使用 sequelize 设置动态 where 条件

node.js - Sequelize Association 获取像 JSON 这样的数据

javascript - 客户端模块工作流程 : (Browserify + npm + gulp) or (RequireJS + Bower + gulp)?

sequelize.js - Sequelize如何包含软删除记录deletedAt

sequelize.js - Sequelize 生成出错的 sql 查询

node.js - Heroku + node.js 错误(Web 进程在启动后 60 秒内无法绑定(bind)到 $PORT)

javascript - 复杂键 - 按第一个键过滤并仅按第二个键排序