{"_id":"grunt-incrediff","_rev":"43-33da6c75681e4847be23155766d25ce2","name":"grunt-incrediff","description":"auto-generate tool of difference between two version","dist-tags":{"latest":"3.3.33"},"versions":{"1.0.0":{"name":"grunt-incrediff","version":"1.0.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","gitHead":"443999e8f12c18c0e10a668eb2fe9ba9e9802a56","_id":"grunt-incrediff@1.0.0","_shasum":"089d78cb38386cc60d3c88da0663d2d4da1e4b45","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"089d78cb38386cc60d3c88da0663d2d4da1e4b45","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","integrity":"sha512-jtacKwc/0xzDtn+2AAmgO2uTiQRJ4rht4NJuZXhNEzblXDMIPlVBhNAXSwbiNpqrLuqp8vJF7YUIrlGaq8FLow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/V51RJgSze1CLxG+v5I9RENtqE5xS91bKmnWe5PgECgIgbqoh3rPVp8eux4YKtY1VEeBZ65z4sIPlMnItQafY0L4="}]}},"2.0.0":{"name":"grunt-incrediff","version":"2.0.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","gitHead":"443999e8f12c18c0e10a668eb2fe9ba9e9802a56","_id":"grunt-incrediff@2.0.0","_shasum":"24f5498a0c2206521ca6b3816c159eb38cfbd801","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"24f5498a0c2206521ca6b3816c159eb38cfbd801","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-2.0.0.tgz","integrity":"sha512-61xN8uMwzz6wnW5XrmPOQWsXWVcduDkQtpfvie9knPBnRIh145xpdfFqWmSyXLYD11x4r8lN8ajEIpUVfO0U9A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJYeOdy9Z0uC+cbkx4X9LyG17Qw8cQm2MEe1KWezFX7wIgfKmRb8AmcgfBVr8daAjVjatYxu5YY+Ckmyjm51wId34="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz"},"2.2.0":{"name":"grunt-incrediff","version":"2.2.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"72658ea6cf662254e5a480f75a83788c340ef097","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"72658ea6cf662254e5a480f75a83788c340ef097","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-2.2.0.tgz","integrity":"sha512-m1xepRsG36cjOqDzc3x5+WO0Ir46s7IDHLOOaFYxcFXmjDcK6AOXOWzoRamDONoB3rO4MipDRArmjr+X8hKEng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCS3Jhhsx/3sNMKgg6dE4qMkE/2XRcpBFnIM+7RpnmOkwIhALR6sYgU8sC8C5LeEYm8vRAL6w1iNHIpq549YVItQZ4o"}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"2f10fea319d329bdbec435c7936968c104b1f696","_id":"grunt-incrediff@2.2.0"},"2.3.0":{"name":"grunt-incrediff","version":"2.3.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"5e55470e808a226172ada38ecc64a3f865ae4995","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"5e55470e808a226172ada38ecc64a3f865ae4995","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-2.3.0.tgz","integrity":"sha512-MwEKAxasIYedU3tzcm7f3cg+ut7FvijC+8JmOlFnm8BDxIl2erTRIMxfq8CvP05+HbW+4pstbJI5DvQ45FAqFA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByFVTyNxLal76NTeN3EYEWH6XxHqrjvZSKFToH793hzAiBVttxTpjz29hGVTq0QRFUZomg20a+UUe2fgFEMPI4GUg=="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"2f10fea319d329bdbec435c7936968c104b1f696","_id":"grunt-incrediff@2.3.0"},"3.0.0":{"name":"grunt-incrediff","version":"3.0.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"ab10d62e7a92f4fcc4587458b7bace3f3f0502aa","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"ab10d62e7a92f4fcc4587458b7bace3f3f0502aa","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.0.0.tgz","integrity":"sha512-K61/iBJm2e06fr4JJxaN0ePYy0subAbuPlCjFuqexZuHe6P3dBazIlHdsK4NAlgQ2JdjcjiiTcPG1xt2vDTXdQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFN2HlfuB2XIxY5GbJvw+uLPDKCC4yJqT+6+D/gK0BjLAiEA4yr9bDQfSKagEE+dN68039F+dwQeRLyj2Abn/bx5UXo="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"f58b28ac7cb8d293cd978a42ca9229c45ee94ab6","_id":"grunt-incrediff@3.0.0"},"3.1.0":{"name":"grunt-incrediff","version":"3.1.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"91d34a58dd1b8721eaeca361807d1cb9c3ad83a2","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"91d34a58dd1b8721eaeca361807d1cb9c3ad83a2","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.1.0.tgz","integrity":"sha512-Wc41QTWYejA7d2P3HgY05kak6I4KiWJyAeUJVcgubOneI7glJ4CdVCHblQ4YMk5H3SbSKrLrjaZ/T8ZMqS/P/Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGPoJOXiUIWzG5Ni6T7HPOYK+zDUOS5QFWpQ6d+oBq1MAiEAnWEAhtHnqFCEXFavstV2/uJQjTlI9ibARdsw04rkdls="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"8d8fe06609a639c1c86a1a317fd319eac877f9c4","_id":"grunt-incrediff@3.1.0"},"3.2.0":{"name":"grunt-incrediff","version":"3.2.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"62aa1e8adcd2b1bdc2b9546aabc0b0ac73f67aeb","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"62aa1e8adcd2b1bdc2b9546aabc0b0ac73f67aeb","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.2.0.tgz","integrity":"sha512-sx6PhrZzU3VsHVDH/GqufoAmObGTRacuPqOk+rsIICBFaoOh4xngLz4Teu0o92Hv9TK3jTRdI/xJqk8Ufx5NUw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDgY+rpV/mdgubavsIjrdimbrdzZNY0OOJaQD/VsgqFUwIhAKCPR21Lzavvo1sJPua4O/SqPokeQhuUwIdZ3VjZ/G3m"}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"727216cfda26bb69b34b6a70d0b38b3e13ebac59","_id":"grunt-incrediff@3.2.0"},"3.2.1":{"name":"grunt-incrediff","version":"3.2.1","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"12dde795931ddda3f9439700aa1678553d0dc716","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"12dde795931ddda3f9439700aa1678553d0dc716","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.2.1.tgz","integrity":"sha512-laaEPxhqwDywCL5EMVI1nGMhZnA/d6RRu9KJVP7Ln/miJ232Svvn6z0Rf+VdtQdfDXgRVu+YnTRAqcTvnvtZSw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE76/3UBrlSaAc7gmNBYdtE4I2S+zkYx98Qv1q2JJiuEAiEAsiEn3zTxQ6yvMGP6rvvEhWPNlJJLuSmBEGuvaJrn7Dc="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"727216cfda26bb69b34b6a70d0b38b3e13ebac59","_id":"grunt-incrediff@3.2.1"},"3.2.2":{"name":"grunt-incrediff","version":"3.2.2","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"898843119829e6cc15849e3c8405698e43070401","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"898843119829e6cc15849e3c8405698e43070401","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.2.2.tgz","integrity":"sha512-hGTE1gFrVqsuC6JXpvrbV4zY54/SQjnFC+ppMZKJppvz9GdpauzbeEwbbDX8f97FANqe/zomzBZfTFH3OTrMuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAsQitH23AgvgYRC4LfTxXLHW5Hmli9KQRyi7puVrrhgAiEA3/671+j0dI9ssru32xuoe8fDzlufCszw9wwU674joaM="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"7b6a6a41b3a535a9186bb2d2cf3e58970ba0bdf1","_id":"grunt-incrediff@3.2.2"},"3.2.3":{"name":"grunt-incrediff","version":"3.2.3","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"8123c772adcaa53b986e24f7137f8f32588c4184","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"8123c772adcaa53b986e24f7137f8f32588c4184","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.2.3.tgz","integrity":"sha512-0f5NG3GYh+UfbjAk/891vck0oZzcEbIzu63EemqBX87RiKvO+qgNUAIZSiBjerSFawAwaM8g5KQkUxVDSM66gQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBiLwDlLu7SODP5LJt3DCgjJG9qK8LIJ/B0xNi2UbmYFAiAcZlVbFntZXjDHd1X68hHFuwyaSDYDYDJ2W1H16gQ5cQ=="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"e8dca3062f1b0827d7375896af6185d3d199d3db","_id":"grunt-incrediff@3.2.3"},"3.3.0":{"name":"grunt-incrediff","version":"3.3.0","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"2e29c70e6ca4aad6d1a8c317caf4b10bfa01bb32","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"}],"dist":{"shasum":"2e29c70e6ca4aad6d1a8c317caf4b10bfa01bb32","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.0.tgz","integrity":"sha512-oxAXkXc7uGTLOJuoycs8krWW5x9CyViFnaWVHjtSCUJjOnoyR4cavxI6XMM0Bal0IWefgqloWgdRlZnJVytkPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICwA5jUYFg8LvBi/ht6Ba1loTebOu2GDyenZ3fICuUpFAiEAqS3tTlI4vl9+64h+JZY5HG5TXML1hzJNCw7zmQgBic0="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"d9d7f7d5a722dff87d5ad9cc4f83a7ed9e60be20","_id":"grunt-incrediff@3.3.0"},"3.3.1":{"name":"grunt-incrediff","version":"3.3.1","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"3f21757cd2dcad6f5effa39cd333f8102cb4cd94","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"dist":{"shasum":"3f21757cd2dcad6f5effa39cd333f8102cb4cd94","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.1.tgz","integrity":"sha512-+vtZHwWWagYGrZiQiI2QcRjCUK1MRrinzLgp4rvsEb3M88pj6yMsNCS2e4iuuse4INZ7BKZSZzbl0qyehR/ung==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdmMCLX6ra3kjzvwovQqHhWs+wgy4xx7wLuPfQftxvqQIgcQihdAfxWaBuTxP8TnLtyTMVDXvTNI2T/FVBac/IcAY="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"7586879d2663efab6a365b49deb9633b660f25b4","_id":"grunt-incrediff@3.3.1"},"3.3.2":{"name":"grunt-incrediff","version":"3.3.2","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"75bb64092a05f294170de92384bc437ac0ce92b0","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"dist":{"shasum":"75bb64092a05f294170de92384bc437ac0ce92b0","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.2.tgz","integrity":"sha512-vDSbe/dV91zooAUBpfr3oCvX86+eWwm97FoS3ZAibv7A1gs+EusSUr2cqNKRrimm0iM3WD+lqU3WoRJ/Ehl5cQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH8IeAxtGnihdfM2p+aEzgytBFehwdkxuOJObIpXKgx+AiBOEUaQf7s64DCwBK4XGV0t0OqpSddNkfC4EBq9Yt6Ulg=="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"1ae9463cf3b41995501657b6a61c74cbaaa8dab4","_id":"grunt-incrediff@3.3.2"},"3.3.31":{"name":"grunt-incrediff","version":"3.3.31","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"2101bd1438481ca28b958e9a8b7cbf3c59a8646f","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"dist":{"shasum":"2101bd1438481ca28b958e9a8b7cbf3c59a8646f","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.31.tgz","integrity":"sha512-Eb7j2W6B70kobgpl/4hm+eWW50RLhGYjCHgPicwHLVZWNJvoKR2xaT/9gigGN0gdVxcNNM5yRaBNi1MiyU2Lbw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH/wn3neUll1g6XN+3BEd9KJl0AdN52xsZYU1o5CE+5hAiB3+kME53R9GJDAR2oQBhSfWy6U5Qgwdqr6JMSxc5t/aA=="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"3a1d9e7cdbe65af8e921b2b33212fc365e2abde3","_id":"grunt-incrediff@3.3.31"},"3.3.32":{"name":"grunt-incrediff","version":"3.3.32","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"df51713d48accde68aea7dcefcb547d096185235","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"dist":{"shasum":"df51713d48accde68aea7dcefcb547d096185235","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.32.tgz","integrity":"sha512-kWgHsVxWzOtOUdbLs0YdTH4RnwBjWCRZ1+gxIOm070v3Bdi5ij2PQ8wQJciN9ziV4vy+33/pRo5seNI977aJ9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAegu8Sqd2L9NrX/W6vQ7C+yPMrHKf7GVvY0UC0DVcqRAiEAxivmy43fcCDbw0b7u0fxoUKDEnspjgta9YzNXZ2C/tA="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"2ae7d716eb71733e5d01f7df5583fd95afbe71dd","_id":"grunt-incrediff@3.3.32"},"3.3.33":{"name":"grunt-incrediff","version":"3.3.33","dependencies":{"async":"^0.6.2","request":"~2.34.0","chalk":"~0.4.0","maxmin":"0.1.0"},"engines":{"node":">= 0.8.0"},"devDependencies":{"grunt":"~0.4.1","load-grunt-tasks":"~0.2.1","grunt-contrib-jshint":"^0.9.2","grunt-contrib-clean":"~0.4.0"},"description":"auto-generate tool of difference between two version","main":"./tasks/incrediff","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"license":"MIT","bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"homepage":"https://github.com/SenYu/grunt-incrediff","_shasum":"a6cff0977411fa9eb404079ed8adb6d5b43c0775","_from":".","_npmVersion":"1.4.20","_npmUser":{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},"maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"dist":{"shasum":"a6cff0977411fa9eb404079ed8adb6d5b43c0775","size":5414,"noattachment":false,"key":"grunt-incrediff/-/grunt-incrediff-1.0.0.tgz","tarball":"https://registry.npmjs.org/grunt-incrediff/-/grunt-incrediff-3.3.33.tgz","integrity":"sha512-q63uuyR+vU1mfUqLTwRA8RMhSkV0f+0fm+3FUEqbk2tyTMVG1JwU05Bj3gAPWzBUXDytNx1ccWmdER9Fk1ny+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDAtRSKt0GX+1P88SZUpr7jGP1xBUMs/nQBBVj70Clp4wIgMmz48L4vlBiw6SNHdGcLdb+hBIhrhhCoidp5ffl/MNo="}]},"directories":{},"publish_time":1406599522285,"_cnpm_publish_time":1406599522285,"_resolved":"http://registry.npm.alibaba-inc.com/grunt-incrediff/download/grunt-incrediff-1.0.0.tgz","gitHead":"2ae7d716eb71733e5d01f7df5583fd95afbe71dd","_id":"grunt-incrediff@3.3.33"}},"readme":"grunt-incrediff\r\n==================\r\n\r\n> grunt构建时自动生成文件间增量更新差异数据\r\n\r\n## 使用文档\r\n\r\n### 注意\r\n- 仅支持 alibaba gitlab 构建时 grunt，其他环境路径不同不保证需求(可能因为CDN路径不同需要修改options)  \r\n- 模块加入 `chunk` / `chunkLcs` 两种差异生成算法，各有使用场景，为了避免算法的不完备性导致差异生成错误，加入强校验，若生成的差异合并失败会使grunt过程fail。\r\n\r\n### 安装\r\n\r\n通过 npm 安装：\r\n\r\n`\r\n$ npm install grunt-incrediff -g\r\n`\r\n\r\n### 配置使用\r\n\r\n<code>\r\nGruntFiles.js\r\n</code>\r\n\r\n\tversion: [],   \r\n\t指定要生成差异文件的原始文件的版本号,如[\"1.0.2\",\"1.0.1\",\"1.0.0\"]，\r\n\t\r\n\tchunkSize: 20,   \r\n\tnewChunk算法调用时使用的参数，分块大小，建议>=10\r\n\t\r\n\tisSingleDiff: true,    \r\n\t若 `isSingleDiff` 为 true ，则\r\n\t生成 v[1]旧版 和 v[0]新版 的差异文件，否则生成 v[1-end] 和 v[0]新版 的所有差异文件\r\n\t\r\n\tisHashStr: true,\r\n\t生成差异信息中，是否压缩重复字符串\r\n\t\r\n\tsourceFormat:  '%{CDNURL}/%{OLDVERSION}/%{FILEPATH}',   \r\n\tCDN上原始文件的获取地址，此处的oldversion \r\n\t  当`isSingleDiff===FALSE`时会匹配 version[>=1]的所有元素，\r\n \t  当`isSingleDiff===TRUE`时会匹配 version[1]的元素\r\n\t\r\n\tformat: '%{FILEPATH}\\_%{OLDVERSION}\\_%{NEWVERSION}.js'    \r\n\t需要生成在build目录的差异文件的路径\r\n\t\r\n\tdest: 'build'    \r\n\t差异文件生成目录\r\n\t\r\n\talgorithm: 'chunk'    \r\n\t枚举类型 `chunk` / `chunklcs`/`auto`，两种差分算法\r\n\t  `chunk`: 时间复杂度低,当差异巨大,(如两个完全不同的文件时),此算法速度较快,但差异文件较大\r\n\t  `chunklcs`: 时间复杂度略高,当差异巨大时,速度较慢,300K的文件间比较能跑5s左右,但在差异小时数据量很小,大约是 `chunk` 算法的 80% 左右\r\n\t  `auto`: 自动选择两者之间 数据量小的那个\r\n\r\n\tnewsrc: 'build'    \r\n\t新版本文件在之前的grunt构建中的生成目录\r\n\r\n\tcdnUrl: 'http://g.assets.daily.taobao.net/dd/h5/'\r\n\tCDN存储路径, 会从此地址下拉取 旧版本 资源文件\r\n\r\n### 构建步骤\r\n1. grunt 配置 \r\n\r\n\t\tgrunt.initConfig({\r\n\t\t\t\tincrediff: {\r\n\t\t\t\t\tincre: {\r\n\t\t\t\t\t\toptions: {\r\n\t\t\t\t\t\t\tversion: [\"1.0.1\",\"1.0.0\"],\r\n\t\t\t\t\t\t\tchunkSize: 20, \r\n\t\t\t                isSingleDiff: true,\r\n\t\t\t                dest: 'build',\r\n\t\t\t                sourceFormat: '%{CDNURL}/%{OLDVERSION}/%{FILEPATH}',\r\n\t\t\t                format: '%{FILEPATH}_%{OLDVERSION}_%{NEWVERSION}.js',\r\n\t\t\t                newsrc: 'build',\r\n\t\t\t                algorithm: 'auto',\r\n\t\t\t\t\t\t\tcdnUrl: 'http://cdnurl/pathprefix/',\r\n\t\t\t            },\r\n\t\t\t        files: {\r\n\t\t\t            src: ['path/to/css.css', 'path/to/js.js']\r\n\t\t\t            }\r\n\t\t\t        },\r\n\t\t\t    }\r\n\t\t});\r\n\r\n2. **如果将 `version: [\"1.0.1\",\"1.0.0\"]`变量单独放在其他文件中，请主动修改**\r\n3. 本地执行 `grunt incrediff` / 服务端自动 `grunt` 时会生成到指定目录\r\n4. **增加差异输出强校验，会对差异进行一次合并测试，如果合并测试失败则grunt会fail(如果算法某些点没测试到可能报错)**\r\n\r\n### 差异数据文件格式\r\n\r\n1.\t默认文件命名 `format: '%{FILEPATH}_%{OLDVERSION}_%{NEWVERSION}.js'`,即生成 `path/to/file.ext_1.0.0_1.0.1.js` 文件\r\n2.\t文件中的内容\r\n\t-\t差异数据 `var data = {hash: (Array), diff: (Array), chunkSize: (Number)};`\r\n\t\t-\t示例 \r\n\t\t\t-\t`originStr = '1234567u'`\r\n\t\t\t-\t`targetStr = '12abc567u'`\r\n\t\t\t-\t`{hash: ['abc'], diff: [ [0,1], [0], [2,2] ], chunkSize: 2}`\r\n\t\t-\t`data.hash` 表示 可以把 `data.diff` 中的重复字符串存到 `data.hash` 数组中节省空间(可选)\r\n\t\t-\t`data.diff` **表示 有3种结构，按以下解释，依次连接起来即能生成 `targetStr`**\r\n\t\t\t-\t`[x, y]`\t : 表示 `originStr.substr( x * data.chunkSize, y * data.chunkSize );`\r\n\t\t\t-\t`[i]`\t\t : 表示 `data.hash[i]`\r\n\t\t\t-\t`'string'` : 表示 字符串\r\n\t\t-\t`data.chunkSize` 表示 分块大小，`chunk`算法默认为**20** / `chunklcs`算法默认为**1**\r\n\t-\t对差异数据进行以下操作\r\n\t\t-\t**`var write = JSON.stringify( data ) + '/*\"\"\"*/';`**\r\n\t\t-\t`fs.writeSync(pathto, write, 'utf8');`\r\n\t\t-\t执行此操作的原因：\r\n\t\t\t-\t为了考虑到把文件放在CDN上，让多个文件能被combo下载后在客户端能正常分割开\r\n\t\t\t-\t需要对每个差异文件标记分隔符 **`/*\"\"\"*/`** (考虑css和js会被一次combo起来)\r\n\t\t\t-\t由于JSON.stringify处理后 形如`\"`,`\\`等字符会被转义处理, 因此 分隔符 **`/*\"\"\"*/`**在理论上并不会在 data的转义序列中出现, 不会出现本地误识别的情况\r\n\t-\t文件中最终内容示例\r\n\t\t-\tURL: http://g.assets.daily.taobao.net/dd/h5/1.3.772/js/app/app_all.js_1.3.771_1.3.772.js\r\n\t\t-\t`{\"hash\":[],\"diff\":[[0,115765],[115796,673],\";console.log(\\\"进入1.3.772 静态渲染方法\\\");var \",[116470,105278]],\"chunkSize\":1}/*\"\"\"*/`\r\n\t\t\r\n### 单独调用\r\n\r\n#### 1. chunk 算法\r\n\r\n> \tvar diff = require('./tasks/lib/newChunk');\r\n> \tvar oldS = '1234567890';\r\n> \tvar newS = '12345678toString90';\r\n> \r\n> **生成差异**\r\n> \r\n> \tvar d = diff(oldS, newS, 2, true /*是否不压缩字符串*/);\r\n> \r\n> **合并差异**\r\n> \r\n> \tvar m = diff.merge(oldS, null /*若d不带chunkSize可以外部输入*/, d)\r\n\r\n#### 2. chunkLcs 算法\r\n\r\n> \tvar diff = require('./tasks/lib/chunkLCS');\r\n> \tvar oldS = '1234567890';\r\n> \tvar newS = '12345678toString90';\r\n> \r\n> **生成差异**\r\n> \r\n> \tvar d = diff(oldS, newS);\r\n> \r\n> **合并差异**\r\n> \r\n> \tvar m = diff.merge(oldS, null, d);\r\n> \r\n\r\n## 代码文档\r\n**其实啊...直接去看代码最好...算法都写在那里...**  \r\n**以下内容为代码实现逻辑，当发现bug/需要修改代码逻辑的时候可以参考一下**\r\n\r\n### 目录说明\r\n\r\n-\t/tasks\r\n\t-\t/incrediff.js\tgrunt插件代码\r\n\t-\t/libs\r\n\t\t-\tnewChunk.js\t\t`chunk` 差分算法实现\r\n\t\t-\tnewLcs.js\t\t`lcs` 算法实现,复杂度太高不提供外部调用\r\n\t\t-\tchunkLCS.js\t\t`chunkLcs` 两种算法结合,具体实现\r\n\r\n### incrediff DOC\r\n\r\n#### 依赖项\r\n\t/* http请求，下载历史版本文件 */\r\n\trequest = require('request')\r\n    async = require('async')\r\n\r\n    /* 显示差异文件大小 */\r\n    maxmin = require('maxmin')\r\n    chalk = require('chalk')\r\n\r\n    /* 差异算法库 */\r\n    diff = require('./lib/newChunk')\r\n\r\n#### 调用方法\r\n\r\n**responseHandler**  \r\n> http响应的回调，为了获取dest, done, container, _name, url, cnt, all，而产生的闭包\r\n\r\n- *入参*\r\n\t- {object} done async异步回调对象\r\n\t- {object} container 统一存储下载下来的字符串\r\n\t- {string} _name 存储的名称\r\n\t- {string} url 下载路径，显示用\r\n\t- {string} cnt 下载顺序，显示用\r\n\t- {string} all 下载总数，显示用\r\n- *返回*\r\n\t- {Function} 返回闭包函数,用于request回调执行\r\n\r\n**strFormat**  \r\n> 字符串处理格式化，按照指定的  %{XXX} 进行替换\r\n\r\n- *入参*\r\n\t- {string} source 源格式串\r\n\t- {object} kvd 替换数据\r\n- *返回*\r\n\t- {string} 结果字串\r\n\r\n\r\n**generateDiffData**  \r\n> 根据输入新旧数据源计算差异，并存储到指定位置，如果algorithm === 'auto' 则会调用两个方法分别运算选取数据量小的那个\r\n\r\n- *入参*\r\n\t- {string} newdata 新数据源\r\n\t- {string} olddata旧数据源\r\n\t- {string} oldver 旧版本号\r\n\t- {string} path 存储路径\r\n- *返回*\r\n\t- *无*\r\n\r\n**generateFullData**  \r\n> 根据输入数据源生成全量数据，并存储到指定位置，(考虑到所有文件,包括CSS和JS能被combo在一起,必须要做一定处理,让本地接收时能够分离成单个文件)\r\n\r\n- *入参*\r\n\t- {string} 数据内容\r\n\t- {string} path 存储路径\r\n- *返回*\r\n\t- *无*\r\n\r\n#### 执行逻辑\r\n\r\n-\t初始化 options  \r\n\t详见 *配置使用*\r\n\t-\t 路径修正(添加'/'或去除'/')\r\n\t-\t 版本修正(添加最后一个''元素)\r\n\t-\t 根据配置选择差分算法('chunk'/'chunkLcs')\r\n-\t读取本地最新资源文件(由之前的grunt生成的),存入`newContent`数组\r\n-\t根据 `sourceFormat` 的格式生成需要下载的旧版本资源文件URL,存入`reqQueue`数组\r\n-\t调用`async.each(reqQueue, ***)` 对所有指定旧版本资源进行下载,把下载后文本存入`reqContent`\r\n-\t`async.each` 全部执行done之后,开始生成差异\r\n\t-\t调用 `generateDiffData` 生成 版本间差异数据\r\n\t-\t调用 `generateFullData` 生成 全量更新数据\r\n\r\n\r\n### lib/newChunk DOC\r\n\r\n#### 调用方法\r\n\r\n**generateOriginBlock**  \r\n> 由o原始字符串按照chunkSize分块大小生成对应块的hashmap，用来标记块是否存在\r\n\r\n- *入参*\r\n\t- {string} o 原始字符串\r\n\t- {number} chunkSize 分块大小\r\n\t- {object} originHash hashmap记录\r\n- *返回*\r\n\t- *无*\r\n\r\n**generateOriginBlock**  \r\n> 对n按照rsync的思想进行滑动块查询，如果在originHash中查询到了就是未被修改，没查询到就当做新增一个字节然后继续，把生成的差异数据存入diffRecord  \r\n> **可以参照 rsync算法描述**\r\n\r\n- *入参*\r\n\t- {object} originHash hashmap记录\r\n\t- {string} n 目标新字符串\r\n\t- {number} chunkSize 分块大小\r\n\t- {object} diffRecord 差异数据\r\n- *返回*\r\n\t- *无*\r\n\r\n**getCorrectHashID**  \r\n> 寻找最优分块hashID,由于复杂度原因，不可能做到绝对最优，采用这个O(N)的遍历来寻找一个相对最优的，找一个距离上次正确匹配最相近的匹配块\r\n\r\n- *入参*\r\n\t- {string} curStr 需要查找的块\r\n\t- {number} priorHashID 最近一次成功匹配\r\n- *返回*\r\n\t- {number} 返回最优匹配块号\r\n\r\n**concatDiffBlock**  \r\n> 把相邻的 数组标记块 或者 相邻的字符 连接起来，节省空间\r\n\r\n- *入参*\r\n\t- {object} diff 差异数组，[[0,1],[1,1],'2','3']\r\n\t- {object} seq 连接之后存储在这里,会被处理成 [[0,2], '23']\r\n\t- {boolean} noIndex TRUE时不适用hash存储字符串，FALSE时使用\r\n- *返回*\r\n\t- *无*\r\n\r\n#### 执行逻辑\r\n\r\n-\t`generateOriginBlock` 计算源数据分块哈希映射\r\n-\t`generateDiffBlock` 根据源哈希映射 和 新数据 计算差异\r\n\t-\t`getCorrectHashID` 计算寻找较优匹配\r\n-\t`concatDiffBlock` 把差异中满足一定条件的相邻块合并\r\n\r\n### lib/newLcs DOC\r\n\r\n#### 调用方法\r\n\r\n**lcsDiff**\r\n>  时间、空间复杂度均为O(N^2)，在 dp 中存储编辑距离， 在 step 中存储具体路径，然后进行一些处理把差异规则化\r\n\r\n- *入参*\r\n\t- {string} o 源字符串\r\n\t- {string} n 新字符串\r\n- *返回*\r\n\t- {object} 差异数据对象\r\n\r\n**buildPaths**\r\n>  由于路径是逆序记录在二维数组中的，需要重新遍历路径才能得到一维的编辑路径\r\n\r\n- *入参*\r\n\t- {number} i 数组一维大小，源字符串长度\r\n\t- {number} j 数组二维大小，新字符串长度\r\n\t- {string} o 源字符串\r\n\t- {string} n 新字符串\r\n\t- {object} step 路径二维数组\r\n- *返回*\r\n\t- {array} infoQueue 路径一维数据，MOD/EQUAL/DEL/ADD\r\n\r\n**buildDiff**\r\n>  处理之前构造的一维路径数组,把MOD/EUQALL/DEL/ADD,转换成 和newChunk一样的形式\r\n\r\n- *入参*\r\n\t- {array} infoPaths 构造的一维路径数组\r\n- *返回*\r\n\t- {array} diffQueue 基本差异数组,还没有优化过\r\n\r\n**concatDiff**\r\n>  把生成的差异数组中符合一定条件的相邻项进行合并,同newChunk中的concatDiffBlock,合并相邻 数组或相邻字符\r\n\r\n- *入参*\r\n\t- {array} diffQueue 基本差异数组,还没有优化过\r\n- *返回*\r\n\t- {array} sequence 优化完成的数组\r\n\r\n#### 执行逻辑\r\n\r\n-\t`lcsDiff` 先跑动态规划,把编辑距离路径记录的二维数组跑出来\r\n\t-\t`buildPaths` 根据二维路径生成一维最短编辑路径,二维包好了所有编辑路径,不论好坏,生成的一维是最优解\r\n\t-\t`buildDiff` 把之前的一维路径的结果(MOD/EUQALL/DEL/ADD)处理成仅由 源字符串o.substr 和 新字符串 拼接就能构成的[[0,2], '23']如此的数组形式\r\n\t-\t`concatDiff` 优化,拼接差异数组中满足某些特定条件的相邻项(数组相邻 或 都是字符串)\r\n\r\n### lib/chunkLcs DOC\r\n\r\n#### 调用方法\r\n\r\n**algoWrap**\r\n>  对外调用做的一个包裹函数,添加了 diff, chunkSize 等通用属性(后来做了点数组优化,增加一个合并小块的过程)\r\n\r\n- *入参*\r\n\t- {string} o 源字符串\r\n\t- {string} n 新字符串\r\n- *返回*\r\n\t- {object} 差异数据对象\r\n\r\n**ChunkLCS**\r\n>  递归调用的主函数,进入后,先试用chunk算法分出 最(较大,非绝对最大)大公共字串,及其前缀和后缀,然后对其前缀和后缀字符串递归调用该函数\r\n\r\n- *入参*\r\n\t- {number} lcsLimit 执行lcs算法的阀值\r\n\t- {number} preStart 递归调用时指明后缀的开始位置\r\n\t- {object} arguments[2] 分情况，1个的话 是 chunkSplit生成的对象，2个的话是2个一旧一新的字符串\r\n- *返回*\r\n\t- {object} 指定块的差异数据对象\r\n\r\n**chunkSplit**\r\n>  对指定的 源数据块o，和 新数据块n，执行最(较)大公共块计算,并返回含有前缀,公共,后缀信息的对象\r\n\r\n- *入参*\r\n\t- {string} o 源数据'块'\r\n\t- {string} n 新数据'块'\r\n\t- {number} preStart 递归调用时指明后缀的开始位置\r\n- *返回*\r\n\t- {object} splitInfo 分隔之后的信息\r\n\r\n**lcsAdapter**\r\n>  lcs算法适配器，需要适配 preStart的预制数，必须加上，否则会错乱\r\n\r\n- *入参*\r\n\t- {string} o 源数据'块'\r\n\t- {string} n 新数据'块'\r\n\t- {number} preStart 递归调用时指明后缀的开始位置\r\n- *返回*\r\n\t- {object} lcsDiff 经过preStart修正的 差异数据\r\n\r\n**mergeBlock**\r\n>  由于chunkSplit进行了前中后的拆分，这是重新组装的函数，并且要考虑两个差分数组拼接时连接处是否可以合并的问题\r\n\r\n- *入参*\r\n\t- {object} source 被组装的前面部分\r\n\t- {object} addition 被组装的后面部分\r\n- *返回*\r\n\t- {object} source 组装好的结果\r\n\r\n**miniLcsBlock**\r\n>  后期发现的一个问题, 本算法能精确到字节级别,那么即chunkSize分块大小===1,所以后期会出现好多[123123,1],这代表了源字符串的一个字符，却要占用10个左右的字节进行表示，对这种情况，直接插入字符，节省差异数据\r\n\r\n- *入参*\r\n\t- {object} diff 差异对象\r\n\t- {string} o 源字符串，从中取需要的\r\n- *返回*\r\n\t- {object} newDiff 新差异对象，优化之后的\r\n\r\n#### 执行逻辑\r\n\r\n-\t`algoWrap` 计算差异\r\n\t-\t最初调用 `ChunkLCS` ,初始化参数 `ChunkLCS( 100, 0, o, n )`\r\n\t\t-\t若满足 lcsLimit 条件,调用 `lcsAdapter` 计算差异并返回\r\n\t\t-\t若不满足\r\n\t\t\t-\t调用 `chunkSplit` 寻找 最(较)大公共字符串, 并对其前缀和后缀分别 递归调用 `ChunkLCS` 计算差异\r\n\t\t\t-\t对计算完成的 前缀和后缀 调用 `mergeBlock` 合并差异\r\n\t-\t得到完整差异后, 调用 `miniLcsBlock` 进行数据优化合并\r\n\r\n","maintainers":[{"name":"senyu","email":"senyu@mail.dlut.edu.cn"},{"name":"chesihui","email":"lover_116@163.com"}],"time":{"modified":"2022-06-18T15:14:24.661Z","created":"2014-07-29T02:05:22.285Z","1.0.0":"2014-07-29T02:05:22.285Z","2.0.0":"2014-07-31T05:21:58.394Z","2.2.0":"2014-07-31T05:40:35.926Z","2.3.0":"2014-07-31T05:57:29.798Z","3.0.0":"2014-08-08T01:38:41.303Z","3.1.0":"2014-08-10T08:23:08.705Z","3.2.0":"2014-08-10T08:28:54.258Z","3.2.1":"2014-08-10T08:49:52.581Z","3.2.2":"2014-08-10T08:52:01.192Z","3.2.3":"2014-08-10T08:57:48.254Z","3.3.0":"2014-08-22T07:52:08.087Z","3.3.1":"2014-08-26T12:09:02.714Z","3.3.2":"2014-08-27T03:09:24.777Z","3.3.3":"2014-08-27T03:25:59.992Z","3.3.31":"2014-08-27T08:57:42.923Z","3.3.32":"2014-08-28T01:41:49.015Z","3.3.33":"2014-08-28T01:43:54.828Z"},"homepage":"https://github.com/SenYu/grunt-incrediff","repository":{"type":"git","url":"https://github.com/SenYu/grunt-incrediff.git"},"author":{"name":"SenYu"},"bugs":{"url":"https://github.com/SenYu/grunt-incrediff/issues"},"license":"MIT","readmeFilename":"README.md","users":{"senyu":true}}