mika-pack-plugin
Advanced tools
| #!/usr/bin/env node | ||
| const args = process.argv.slice(2); | ||
| console.log('hello mika',args) |
| export default { | ||
| callName: ()=> 'mika' | ||
| } |
+5
-0
@@ -7,2 +7,4 @@ (function (global, factory) { | ||
| const HtmlWebpackPlugin = require('html-webpack-plugin'); | ||
| class MikaWebpackPlugin { | ||
@@ -19,4 +21,7 @@ // 定义 `apply` 方法 | ||
| // 指定要追加的事件钩子函数 | ||
| // compiler.hooks.compilation.tap("MikaWebpackPlugin", compilation => { | ||
| compiler.hooks.emit.tapPromise("MikaWebpackPlugin", compilation => { | ||
| return new Promise(resolve => { | ||
| HtmlWebpackPlugin.getHooks(compilation); | ||
| const cache = {}; | ||
@@ -23,0 +28,0 @@ const assetKeys = Object.keys(compilation.assets); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bundle.js","sources":["../src/main.js"],"sourcesContent":["class MikaWebpackPlugin {\n // 定义 `apply` 方法\n apply(compiler) {\r\n\tconst simulateRemoteData = key => {\r\n\t\tconst data = {\r\n\t\t\theader: \"<div>HEADER</div>\",\r\n\t\t\tfooter: \"<div>FOOTER</div>\",\r\n\t\t}\r\n\t\treturn Promise.resolve(data[key]);\r\n\t}\r\n // 指定要追加的事件钩子函数\n compiler.hooks.emit.tapPromise(\"MikaWebpackPlugin\", compilation => {\n\t\treturn new Promise(resolve => {\n\t\t\tconst cache = {};\n\t\t\tconst assetKeys = Object.keys(compilation.assets);\n\t\t\tfor (const key of assetKeys) {\n\t\t\t\tconst isLastAsset = key === assetKeys[assetKeys.length - 1];\n\t\t\t\tif (!/.*\\.html$/.test(key)) {\n\t\t\t\t\tif (isLastAsset) resolve();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet target = compilation.assets[key].source();\r\n\t\t\t\tconst matchedValues = target.matchAll(/<!-- inject:name=\"(\\S*?)\" -->/g); // `matchAll`函数需要`Node v12.0.0`以上\r\n\t\t\t\tconst tags = [];\n\t\t\t\tfor (const item of matchedValues) {\r\n\t\t\t\t\tconst [tag, name] = item;\r\n\t\t\t\t\tconsole.log(tag)\n\t\t\t\t\ttags.push({\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdata: cache[name] ? cache[name] : simulateRemoteData(name),\r\n\t\t\t\t\t\t// data: cache[name],\n\t\t\t\t\t});\n\t\t\t\t}\r\n\t\t\t\tconsole.log(tags)\n\t\t\t\tPromise.all(tags.map(item => item.data))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tres.forEach((data, index) => {\n\t\t\t\t\t\t\tconst tag = tags[index].tag;\n\t\t\t\t\t\t\tconst name = tags[index].name;\n\t\t\t\t\t\t\tif (!cache[name]) cache[name] = data;\n\t\t\t\t\t\t\ttarget = target.replace(tag, data);\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tcompilation.assets[key] = {\n\t\t\t\t\t\t\tsource() {\n\t\t\t\t\t\t\t\treturn target;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsize() {\n\t\t\t\t\t\t\t\treturn this.source().length;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tif (isLastAsset) resolve();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\t}\n}\r\n// module.exports = MikaWebpackPlugin;\r\nexport default MikaWebpackPlugin"],"names":[],"mappings":";;;;;;CAAA,MAAM,iBAAiB,CAAC;CACxB;CACA,IAAI,KAAK,CAAC,QAAQ,EAAE;CACpB,CAAC,MAAM,kBAAkB,GAAG,GAAG,IAAI;CACnC,EAAE,MAAM,IAAI,GAAG;CACf,GAAG,MAAM,EAAE,mBAAmB;CAC9B,GAAG,MAAM,EAAE,mBAAmB;CAC9B,IAAG;CACH,EAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;CACpC,GAAE;CACF;CACA,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,WAAW,IAAI;CACtE,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;CAChC,GAAG,MAAM,KAAK,GAAG,EAAE,CAAC;CACpB,GAAG,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;CACrD,GAAG,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE;CAChC,IAAI,MAAM,WAAW,GAAG,GAAG,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;CAChE,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;CAChC,KAAK,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;CAChC,KAAK,SAAS;CACd,KAAK;CACL,IAAI,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;CAClD,IAAI,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;CAC5E,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;CACpB,IAAI,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE;CACtC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9B,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,EAAC;CACrB,KAAK,IAAI,CAAC,IAAI,CAAC;CACf,MAAM,GAAG;CACT,MAAM,IAAI;CACV,MAAM,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC;CAChE;CACA,MAAM,CAAC,CAAC;CACR,KAAK;CACL,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,EAAC;CACrB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;CAC5C,MAAM,IAAI,CAAC,GAAG,IAAI;CAClB,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;CACnC,OAAO,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;CACnC,OAAO,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;CACrC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5C,OAAO,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;CAC1C,OAAO,CAAC,CAAC;CACT,MAAM,CAAC;CACP,MAAM,IAAI,CAAC,MAAM;CACjB,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG;CAChC,OAAO,MAAM,GAAG;CAChB,QAAQ,OAAO,MAAM,CAAC;CACtB,QAAQ;CACR,OAAO,IAAI,GAAG;CACd,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;CACpC,QAAQ;CACR,OAAO,CAAC;CACR,MAAM,CAAC;CACP,MAAM,IAAI,CAAC,MAAM;CACjB,MAAM,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;CACjC,MAAM,CAAC,CAAC;CACR,IAAI;CACJ,GAAG,CAAC,CAAC;CACL,EAAE,CAAC,CAAC;CACJ,EAAE;CACF;;;;;;;;"} | ||
| {"version":3,"file":"bundle.js","sources":["../src/main.js"],"sourcesContent":["import mikaUtil from './utils'\r\nconst HtmlWebpackPlugin = require('html-webpack-plugin');\r\n\r\nclass MikaWebpackPlugin {\n // 定义 `apply` 方法\n apply(compiler) {\r\n\tconst simulateRemoteData = key => {\r\n\t\tconst data = {\r\n\t\t\theader: \"<div>HEADER</div>\",\r\n\t\t\tfooter: \"<div>FOOTER</div>\",\r\n\t\t}\r\n\t\treturn Promise.resolve(data[key]);\r\n\t}\r\n // 指定要追加的事件钩子函数\r\n // compiler.hooks.compilation.tap(\"MikaWebpackPlugin\", compilation => {\r\n\n compiler.hooks.emit.tapPromise(\"MikaWebpackPlugin\", compilation => {\n\t\treturn new Promise(resolve => {\r\n\t\t\tconst hooks = HtmlWebpackPlugin.getHooks(compilation);\n\t\t\tconst cache = {};\n\t\t\tconst assetKeys = Object.keys(compilation.assets);\n\t\t\tfor (const key of assetKeys) {\n\t\t\t\tconst isLastAsset = key === assetKeys[assetKeys.length - 1];\n\t\t\t\tif (!/.*\\.html$/.test(key)) {\n\t\t\t\t\tif (isLastAsset) resolve();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet target = compilation.assets[key].source();\r\n\t\t\t\tconst matchedValues = target.matchAll(/<!-- inject:name=\"(\\S*?)\" -->/g); // `matchAll`函数需要`Node v12.0.0`以上\r\n\t\t\t\tconst tags = [];\n\t\t\t\tfor (const item of matchedValues) {\r\n\t\t\t\t\tconst [tag, name] = item;\r\n\t\t\t\t\tconsole.log(tag)\n\t\t\t\t\ttags.push({\n\t\t\t\t\t\ttag,\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tdata: cache[name] ? cache[name] : simulateRemoteData(name),\r\n\t\t\t\t\t\t// data: cache[name],\n\t\t\t\t\t});\n\t\t\t\t}\r\n\t\t\t\tconsole.log(tags)\n\t\t\t\tPromise.all(tags.map(item => item.data))\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tres.forEach((data, index) => {\n\t\t\t\t\t\t\tconst tag = tags[index].tag;\n\t\t\t\t\t\t\tconst name = tags[index].name;\n\t\t\t\t\t\t\tif (!cache[name]) cache[name] = data;\n\t\t\t\t\t\t\ttarget = target.replace(tag, data);\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tcompilation.assets[key] = {\n\t\t\t\t\t\t\tsource() {\n\t\t\t\t\t\t\t\treturn target;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsize() {\n\t\t\t\t\t\t\t\treturn this.source().length;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tif (isLastAsset) resolve();\n\t\t\t\t\t});\n\t\t\t}\n\t\t});\n\t});\n\t}\n}\r\n// module.exports = MikaWebpackPlugin;\r\nexport default MikaWebpackPlugin"],"names":[],"mappings":"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"} |
+5
-1
| { | ||
| "name": "mika-pack-plugin", | ||
| "version": "1.0.4", | ||
| "version": "1.0.5", | ||
| "author": "daryl", | ||
| "bin": { | ||
| "mika": "bin/mika.js" | ||
| }, | ||
| "scripts": { | ||
| "kira": "mika", | ||
| "dev": "rollup -c --environment NODE_ENV=development -w", | ||
@@ -7,0 +11,0 @@ "build": "rollup -c --environment NODE_ENV=prod" |
+6
-0
@@ -0,1 +1,4 @@ | ||
| import mikaUtil from './utils' | ||
| const HtmlWebpackPlugin = require('html-webpack-plugin'); | ||
| class MikaWebpackPlugin { | ||
@@ -12,4 +15,7 @@ // 定义 `apply` 方法 | ||
| // 指定要追加的事件钩子函数 | ||
| // compiler.hooks.compilation.tap("MikaWebpackPlugin", compilation => { | ||
| compiler.hooks.emit.tapPromise("MikaWebpackPlugin", compilation => { | ||
| return new Promise(resolve => { | ||
| const hooks = HtmlWebpackPlugin.getHooks(compilation); | ||
| const cache = {}; | ||
@@ -16,0 +22,0 @@ const assetKeys = Object.keys(compilation.assets); |
10371
10.31%10
25%153
7.75%