搞了一个通过模板注释维护文件内容的小工具

2020-07-25 20:15:36 +08:00
 vilic

项目各种包越来越多,手动维护比较蛋疼,容易遗漏,所以搞了这么个工具。

https://github.com/makeflow/inplate

例子

Dockerfile

FROM node

# @inplate
# {{#each packageFilePaths}}
# COPY {{value}}{{padding}}  /app/{{value}}
# {{/each}}
# @plate
# @end

Dockerfile.js

const Glob = require('glob');

module.exports = {
  data: {
    packageFilePaths: pad(
      Glob.sync('**/package.json', {
        ignore: '**/node_modules/**',
      }),
    ),
  },
};

function pad(values) {
  let maxLength = Math.max(...values.map(value => value.length));

  return values.map(value => {
    return {
      value,
      padding: value.padEnd(maxLength).slice(value.length),
    };
  });
}

执行 inplate Dockerfile 后,文件就会被更新为类似:

FROM node

# @inplate
# {{#each packageFilePaths}}
# COPY {{value}}{{padding}}  /app/{{value}}
# {{/each}}
# @plate
COPY package.json               /app/package.json
COPY packages/foo/package.json  /app/packages/foo/package.json
COPY packages/bar/package.json  /app/packages/bar/package.json
# @end

CI 中可以执行 inplate Dockerfile --assert 来确保文件已经更新,当然也支持配置文件、通配符等。

1303 次点击
所在节点    分享创造
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693090

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX