
рдЖрдЬ рдореИрдВ
VueJS рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдореИрдиреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛
рд╣реВрдВ ред
рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд╕реНрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкрд░реАрдХреНрд╖рдХ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рдмреАрдЪ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ "рд▓рд╛рдЗрд╡ рд╕рдВрдЪрд╛рд░" рд╣реЛрддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЖрд░рд╛рдорджрд╛рдпрдХ рдФрд░ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдорд╛рд░реЗ VueJS рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рд╣рдордиреЗ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ред рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
VueJS рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдШрдЯрдХред рдПрдХ рдШрдЯрдХ рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬреЛ VueJS рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .vue рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред VueJS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рдпрдВ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдпрд╣ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рдПрдХрд▓ рдШрдЯрдХ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдПрдХрд▓ рдлрд╝рд╛рдЗрд▓ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЖрдзрд╛рд░ рдХреНрдпрд╛ рд╣реИред
рд╡рд┐рдЪрд╛рд░
рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдЙрди рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдореЗрдВ рдкрд┐рдЫрд▓реЗ рд░рд┐рд▓реАрдЬ / рджреЗрд╡ рдпрд╛ рдореВрд▓ рдмреНрд░рдВрдЪ рд╕реЗ рдмрджрд▓рд╛рд╡ рдЖрдП рд╣реИрдВ (рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рднрдВрдбрд╛рд░ рд╣реИ)ред рдпрд╣ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдЙрди рдШрдЯрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдФрд░ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рдЧреБрдЬрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реНрдг рдкреНрд░рддрд┐рдЧрдорди рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдШрдЯрдХ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдФрд░ рд▓рдХреНрд╖реНрдп рдХреЗ рдЕрдВрддрд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЕрд░реНрдерд╛рддред рд╡рд╣ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рд╕рднреА рд╕рдВрд╢реЛрдзрд┐рдд рдШрдЯрдХреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ, рдЗрд╕ рддрд░рд╣:
git diff --no-commit-id --name-only -r 'origin/dev'
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рддрд┐рдмрджреНрдз рдФрд░ 'рдореВрд▓ / рджреЗрд╡' рд╢рд╛рдЦрд╛ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдорд┐рд▓рддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИред
рдЬрд╛рджреВ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ,
рд╡реЗрдмрдкреИрдХ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдореЛрдб рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рдЦреБрдж рдХреЗ рд▓рд┐рдП "рдкрд░реАрдХреНрд╖рдг" рдореЛрдб рдмрдирд╛рдпрд╛, рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ "рджреЗрд╡" рдореЛрдб (рд╡реНрдпреВ-рдХреНрд▓реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ) рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрди рдЧрдпрд╛ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИ:
git.diffs.js
const exec = require('child_process').exec; var changedComponents = [];
рдФрд░ рдЗрд╕ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛:
env.CHANGED_COMPONENTS = require('./git.diffs')
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдкреВрд░реА рд╕реВрдЪреА рдХреЛ "рдЫреЛрдбрд╝ рджрд┐рдпрд╛" рдФрд░ рдЕрдм рдЗрд╕реЗ рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЕрд╢реБрджреНрдзрддрд╛ рдкреЗрд╢ рдХреА, рдЬреЛ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдШрдЯрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдпрджрд┐ рд╣реИ, рддреЛ рдЙрд╕реЗ рд▓рд╛рд▓ рдлреНрд░реЗрдо рдХреЗ рд╕рд╛рде рдШреЗрд░ рд▓реЗрдВред
export default { install (Vue, options) { let oldStyle = null; Vue.mixin({ mounted () { if (this.isCodeChanged) { setInterval(() => { if (this.$el) { if (store.state.system.isTesting()) { if (!oldStyle) { oldStyle = this.$el.style.border ? this.$el.style.border : 'empty'; } this.$el.style.border = 'solid 3px #f00'; } else { if ((!oldStyle || !oldStyle.length || oldStyle === 'empty') && this.$el.style) { this.$el.style.removeProperty('border'); } else { this.$el.style.border = oldStyle; } } } }, 300); } }, computed: { vueComponentName () { return this.$options.__file; }, isCodeChanged () { return window.$testing.CHANGED_COMPONENTS.indexOf(this.$options.__file) >= 0; } } }); } };
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреЛрдб рдореЗрдВ рдПрдХ рд╕рдВрдХреЗрдд store.state.system.isTesting () рдХреЛрдб рд╣реИ рдЬреЛ рдмрджрд▓реЗ рд╣реБрдП рдШрдЯрдХ рдХреЗ рджреГрд╢реНрдп рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдХреЛ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдХ рдХреЛ рд▓реЗрдЖрдЙрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХ рдЪрдпрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреГрд╖реНрда рдмрдирд╛рдпрд╛ рдЬрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдХ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдСрдирд▓рд╛рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ / рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рд░реНрдЧ рдкрд░ "рдкрд░реАрдХреНрд╖рдг" рдмрд┐рд▓реНрдб рдореЛрдб рдореЗрдВ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд┐рддреНрд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдШрдЯрдХ рджрд┐рдЦрддрд╛ рд╣реИред
рдСрдл рд╕реНрдХреНрд░реАрди
рдмреЗрд╢рдХ, рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реЗрд╡рд╛ рдШрдЯрдХреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдХ рдХреА рдЖрдБрдЦреЛрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд┐рд▓реНрдб рдЯрд╛рдЗрдо, рдмрд┐рд▓реНрдб рдореЛрдб, рдХрд░рдВрдЯ рд░рд┐рд▓реАрдЬрд╝ рдЖрджрд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред