项目各种包越来越多,手动维护比较蛋疼,容易遗漏,所以搞了这么个工具。
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
来确保文件已经更新,当然也支持配置文件、通配符等。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.