Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
표시
레이아웃
나란히 보기
합쳐 보기
실시간 편집
공백 변경 숨기기
변경 없는 행 숨기기
줄바꿈 비활성화
비교 단위
스마트
구문
없음
모양 변경
처리
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
Untitled diff
생성일
9년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
2 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
87 행
복사
4 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
89 행
복사
let fs = require('fs'),
let fs = require('fs'),
path = require('path'),
path = require('path'),
crypto = require('crypto'),
crypto = require('crypto'),
Stream = require('stream'),
Stream = require('stream'),
gutil = require('gulp-util'),
gutil = require('gulp-util'),
oncechecksums = {};
oncechecksums = {};
module.exports = function(options = {}) {
module.exports = function(options = {}) {
let stream = new Stream.Transform({objectMode: true}),
let stream = new Stream.Transform({objectMode: true}),
settings = {
settings = {
namespace: false,
namespace: false,
algorithm: 'sha1',
algorithm: 'sha1',
file: '.checksums',
file: '.checksums',
fileIndent: 4
fileIndent: 4
};
};
options = (typeof options === 'string') ? {namespace: options} : options;
options = (typeof options === 'string') ? {namespace: options} : options;
for (let key in options) {
for (let key in options) {
if (options.hasOwnProperty(key)) {
if (options.hasOwnProperty(key)) {
settings[key] = options[key];
settings[key] = options[key];
}
}
}
}
if (settings.file) {
if (settings.file) {
if (!fs.existsSync(settings.file)) {
if (!fs.existsSync(settings.file)) {
fs.writeFileSync(settings.file, JSON.stringify({}, null, settings.fileIndent));
fs.writeFileSync(settings.file, JSON.stringify({}, null, settings.fileIndent));
}
}
try {
try {
let content = fs.readFileSync(settings.file, 'utf8');
let content = fs.readFileSync(settings.file, 'utf8');
if (content) {
if (content) {
oncechecksums = JSON.parse(content);
oncechecksums = JSON.parse(content);
}
}
} catch (e) {
} catch (e) {
// go on about our business
// go on about our business
console.log(e);
console.log(e);
}
}
}
}
if (!!settings.namespace && !oncechecksums[settings.namespace]) {
if (!!settings.namespace && !oncechecksums[settings.namespace]) {
oncechecksums[settings.namespace] = {};
oncechecksums[settings.namespace] = {};
}
}
stream._transform = function(file, encoding, next) {
stream._transform = function(file, encoding, next) {
복사
복사됨
복사
복사됨
var flow = this;
if (file.isBuffer()) {
if (file.isBuffer()) {
let filename = path.basename(file.path),
let filename = path.basename(file.path),
filechecksum = crypto
filechecksum = crypto
.createHash(settings.algorithm || 'sha1')
.createHash(settings.algorithm || 'sha1')
.update(file.contents.toString('utf8'))
.update(file.contents.toString('utf8'))
.digest('hex');
.digest('hex');
if (settings.namespace in oncechecksums) {
if (settings.namespace in oncechecksums) {
if (oncechecksums[settings.namespace][filename] === filechecksum) {
if (oncechecksums[settings.namespace][filename] === filechecksum) {
return next();
return next();
}
}
oncechecksums[settings.namespace][filename] = filechecksum;
oncechecksums[settings.namespace][filename] = filechecksum;
} else {
} else {
if (oncechecksums[filename] === filechecksum) {
if (oncechecksums[filename] === filechecksum) {
return next();
return next();
}
}
oncechecksums[filename] = filechecksum;
oncechecksums[filename] = filechecksum;
}
}
if (settings.file) {
if (settings.file) {
fs.writeFile(settings.file, JSON.stringify(oncechecksums, null, settings.fileIndent), error => {
fs.writeFile(settings.file, JSON.stringify(oncechecksums, null, settings.fileIndent), error => {
if (error) {
if (error) {
return next(new gutil.PluginError('gulp-once', error, {showStack: true}));
return next(new gutil.PluginError('gulp-once', error, {showStack: true}));
}
}
});
});
}
}
복사
복사됨
복사
복사됨
return next(null, file);
}
}
복사
복사됨
복사
복사됨
flow.push(file);
return next();
};
};
return stream;
return stream;
};
};
저장된 비교 결과
원본
파일 열기
let fs = require('fs'), path = require('path'), crypto = require('crypto'), Stream = require('stream'), gutil = require('gulp-util'), oncechecksums = {}; module.exports = function(options = {}) { let stream = new Stream.Transform({objectMode: true}), settings = { namespace: false, algorithm: 'sha1', file: '.checksums', fileIndent: 4 }; options = (typeof options === 'string') ? {namespace: options} : options; for (let key in options) { if (options.hasOwnProperty(key)) { settings[key] = options[key]; } } if (settings.file) { if (!fs.existsSync(settings.file)) { fs.writeFileSync(settings.file, JSON.stringify({}, null, settings.fileIndent)); } try { let content = fs.readFileSync(settings.file, 'utf8'); if (content) { oncechecksums = JSON.parse(content); } } catch (e) { // go on about our business console.log(e); } } if (!!settings.namespace && !oncechecksums[settings.namespace]) { oncechecksums[settings.namespace] = {}; } stream._transform = function(file, encoding, next) { if (file.isBuffer()) { let filename = path.basename(file.path), filechecksum = crypto .createHash(settings.algorithm || 'sha1') .update(file.contents.toString('utf8')) .digest('hex'); if (settings.namespace in oncechecksums) { if (oncechecksums[settings.namespace][filename] === filechecksum) { return next(); } oncechecksums[settings.namespace][filename] = filechecksum; } else { if (oncechecksums[filename] === filechecksum) { return next(); } oncechecksums[filename] = filechecksum; } if (settings.file) { fs.writeFile(settings.file, JSON.stringify(oncechecksums, null, settings.fileIndent), error => { if (error) { return next(new gutil.PluginError('gulp-once', error, {showStack: true})); } }); } return next(null, file); } }; return stream; };
수정본
파일 열기
let fs = require('fs'), path = require('path'), crypto = require('crypto'), Stream = require('stream'), gutil = require('gulp-util'), oncechecksums = {}; module.exports = function(options = {}) { let stream = new Stream.Transform({objectMode: true}), settings = { namespace: false, algorithm: 'sha1', file: '.checksums', fileIndent: 4 }; options = (typeof options === 'string') ? {namespace: options} : options; for (let key in options) { if (options.hasOwnProperty(key)) { settings[key] = options[key]; } } if (settings.file) { if (!fs.existsSync(settings.file)) { fs.writeFileSync(settings.file, JSON.stringify({}, null, settings.fileIndent)); } try { let content = fs.readFileSync(settings.file, 'utf8'); if (content) { oncechecksums = JSON.parse(content); } } catch (e) { // go on about our business console.log(e); } } if (!!settings.namespace && !oncechecksums[settings.namespace]) { oncechecksums[settings.namespace] = {}; } stream._transform = function(file, encoding, next) { var flow = this; if (file.isBuffer()) { let filename = path.basename(file.path), filechecksum = crypto .createHash(settings.algorithm || 'sha1') .update(file.contents.toString('utf8')) .digest('hex'); if (settings.namespace in oncechecksums) { if (oncechecksums[settings.namespace][filename] === filechecksum) { return next(); } oncechecksums[settings.namespace][filename] = filechecksum; } else { if (oncechecksums[filename] === filechecksum) { return next(); } oncechecksums[filename] = filechecksum; } if (settings.file) { fs.writeFile(settings.file, JSON.stringify(oncechecksums, null, settings.fileIndent), error => { if (error) { return next(new gutil.PluginError('gulp-once', error, {showStack: true})); } }); } } flow.push(file); return next(); }; return stream; };
비교하기