{"id":10006182,"date":"2022-08-11T22:07:07","date_gmt":"2022-08-11T14:07:07","guid":{"rendered":"https:\/\/ityet.com\/?p=10006182"},"modified":"2022-08-11T22:07:07","modified_gmt":"2022-08-11T14:07:07","slug":"wuzzle%ef%bc%8c%e8%bf%9b%e8%a1%8c%e5%9f%ba%e4%ba%8e-webpack-%e7%9a%84-js-%e8%bd%ac%e8%af%91","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10006182","title":{"rendered":"Wuzzle\uff0c\u8fdb\u884c\u57fa\u4e8e webpack \u7684 JS \u8f6c\u8bd1"},"content":{"rendered":"<p>\u8f6c\u8bd1\u5668\uff08transpiler\uff09\u662f\u6307\u80fd\u591f\u8fdb\u884c\u6587\u4ef6\u5230\u6587\u4ef6\u4e00\u5bf9\u4e00\u8f6c\u6362\u7684\u7f16\u8bd1\u5668\uff08compiler\uff09\u3002\u5728 JS \u4e16\u754c\u4e2d\uff0c\u5e38\u89c1\u7684\u5f00\u7bb1\u5373\u53ef\u7528\u7684\u8f6c\u8bd1\u5668\u6709 <a href=\"https:\/\/link.segmentfault.com\/?enc=Q9DXOLtNqblhSR4C%2F9ZTPQ%3D%3D.vhbmukVaL7dbH%2BVNw8iU5wqVnr3aQcQDJyhoSTRCbvO4H1nuFdktfmtPvklbkW%2B7cIlEMtbvsmwvAKx3ac3l4LJDCzDu%2F1WBc1SCCq7GWec%3D\" rel=\"nofollow\">typescript cli<\/a>\u3001<a href=\"https:\/\/link.segmentfault.com\/?enc=jKO4Qqhv8HuvOGikCtaeqw%3D%3D.bj06PkxnirxXSamZBSuJAXpJkZ6mk0JaLMuE5UDUIH7a7JS3JTfrjLOnHSA9wNtD\" rel=\"nofollow\">babel cli<\/a> \u7b49\uff0c\u4f46\u4ed6\u4eec\u4e00\u822c\u53ea\u5904\u7406 <code>.js<\/code>\u3001<code>.ts<\/code> \u7b49\u811a\u672c\u6587\u4ef6\u3002\u800c webpack \u5c3d\u7ba1\u80fd\u901a\u8fc7\u914d\u7f6e\u5904\u7406\u5404\u79cd\u6587\u4ef6\uff0c\u4f46\u4ed6\u66f4\u5173\u6ce8\u5982\u4f55\u6253\u5305 JS\uff0c\u505a\u6587\u4ef6\u4e00\u5bf9\u4e00\u8f6c\u6362\u76f8\u5f53\u9ebb\u70e6\u3002<\/p>\n<p>\u4e3a\u4e86\u89e3\u51b3\u8fd9\u4e9b\u5c40\u9650\uff0c<a href=\"https:\/\/link.segmentfault.com\/?enc=akElMX%2FJyUY3Mumq%2BzmRXw%3D%3D.PqgBwXWac20X%2Fie%2BBvhxfglwx%2BuNnpzFGG1g00IB%2Bmngq4bAgtnuQbK7m1cg1%2Flk\" rel=\"nofollow\">wuzzle<\/a> \u4f5c\u4e3a\u914d\u7f6e webpack \u7f16\u8bd1\u7684\u8865\u5145\u8005\uff0c\u63d0\u4f9b\u4e86\u57fa\u4e8e webpack \u5c01\u88c5\u7684 JS \u8f6c\u8bd1\u547d\u4ee4 <code>wuzzle transpile<\/code>\uff0c\u4ee5\u4e0b\u662f\u5177\u4f53\u7528\u6cd5\u3002<\/p>\n<h2>\u4f7f\u7528 <code>wuzzle transpile<\/code> \u8f6c\u8bd1 <code>.ts<\/code> \u6587\u4ef6<\/h2>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u770b\u4e0b <code>wuzzle transpile<\/code> \u5bf9 <code>.ts<\/code> \u6587\u4ef6\u7684\u8f6c\u8bd1\u3002\u521d\u59cb\u5316\u4e00\u4e2a\u7a7a\u76ee\u5f55 <code>demo<\/code>\uff0c\u5e76\u5b89\u88c5 wuzzle\uff1a<\/p>\n<pre><code class=\"sh\">$ mkdir demo\n# ...\n$ cd demo\n# ...\n$ npm init -y\n# ...\n$ npm i -D wuzzle<\/code><\/pre>\n<p>\u5728 <code>src\/server.ts<\/code> \u51c6\u5907\u4e00\u4efd\u7b80\u6613\u670d\u52a1\u5668\u4ee3\u7801\uff0c\u5e76\u5b89\u88c5\u6240\u9700\u4f9d\u8d56\uff1a<\/p>\n<pre><code class=\"ts\">import express from 'express';\n\nconst port = process.env.PORT ?? '5000';\n\nconst app = express();\n\napp.get('\/', (req, res) =&gt; {\n  res.send('&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;\/head&gt;&lt;body&gt;Hello, wuzzle!&lt;\/body&gt;&lt;\/html&gt;');\n});\n\napp.listen(port, () =&gt; console.log(`Started on port ${port}.`));<\/code><\/pre>\n<pre><code class=\"sh\">$ npm i -S express\n# ...\n$ npm i -D @types\/express<\/code><\/pre>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b <code>wuzzle transpile<\/code> \u7684\u8f6c\u8bd1\u884c\u4e3a\u7b49\u540c\u4e8e\u96f6\u914d\u7f6e\u7684 webpack\uff0c\u51e0\u4e4e\u4e0d\u505a\u4efb\u4f55\u4e8b\u60c5\uff0c\u9700\u8981\u5b89\u88c5 webpack \u5904\u7406 <code>.ts<\/code> \u6587\u4ef6\u6240\u9700\u4f9d\u8d56\u5e76\u8fdb\u884c\u914d\u7f6e\u3002<\/p>\n<p>\u56e0\u6b64\uff0c\u5b89\u88c5 <code>typescript<\/code>\u3001<code>ts-loader<\/code>\uff0c\u501f\u52a9 <code>tsc --init<\/code> \u521b\u5efa <code>tsconfig.json<\/code>\uff1a<\/p>\n<pre><code class=\"sh\">$ npm i -D &quot;ts-loader@^7.0.5&quot; &quot;typescript@~4.6.0&quot;\n# ...\n$ npx tsc --init\nCreated a new tsconfig.json with: # ...<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u5728 <code>package.json<\/code> \u65c1\u521b\u5efa\u6587\u4ef6 <code>wuzzle.config.js<\/code> \u914d\u7f6e <code>wuzzle transpile<\/code>\uff1a<\/p>\n<pre><code class=\"js\">module.exports = (webpackConfig) =&gt; {\n  webpackConfig.module = {\n    rules: [\n      {\n        test: \/\/.ts$\/,\n        loader: 'ts-loader',\n      },\n    ],\n  };\n  webpackConfig.resolve = {\n    extensions: ['.ts', '.js', '.json'],\n  };\n};<\/code><\/pre>\n<p>\u540c\u65f6\uff0c\u65b9\u4fbf\u8d77\u89c1\uff0c\u5728 <code>package.json<\/code> \u5199\u5165\u542f\u52a8\u811a\u672c\u548c\u6784\u5efa\u811a\u672c\uff1a<\/p>\n<pre><code class=\"diff\">  &quot;scripts&quot;: {\n-    &quot;test&quot;: &quot;echo \/&quot;Error: no test specified\/&quot; &amp;&amp; exit 1&quot;\n+    &quot;start&quot;: &quot;node dist\/server&quot;,\n+    &quot;build&quot;: &quot;wuzzle transpile \/&quot;src\/**\/*\/&quot; -d dist&quot;\n  },<\/code><\/pre>\n<p>\u73b0\u5728\uff0c\u6267\u884c <code>build<\/code> \u811a\u672c\uff0c\u5c31\u53ef\u4ee5\u901a\u8fc7 <code>wuzzle transpile<\/code> \u5c06 <code>.ts<\/code> \u6587\u4ef6\u8f6c\u8bd1\u6210 <code>.js<\/code> \u6587\u4ef6\u4e86\uff1a<\/p>\n<pre><code class=\"sh\">$ npm run build\nStart compiling 'src\/**\/*.ts'.\nFile 'src\/server.ts' compiled.\nAll files compiled.<\/code><\/pre>\n<p>\u8f6c\u8bd1\u5b8c\u6210\u4e4b\u540e\uff0c\u901a\u8fc7 <code>start<\/code> \u811a\u672c\uff0c\u5c31\u53ef\u4ee5\u542f\u52a8\u8fd9\u4e2a\u670d\u52a1\u5668\u4e86\uff0c\u8bbf\u95ee <code>http:\/\/localhost:5000<\/code>\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u8fd0\u884c\u6548\u679c\u4e86\uff1a<\/p>\n<pre><code class=\"sh\">$ npm start\n# ...\nStarted on port 5000.<\/code><\/pre>\n<h2>\u4f7f\u7528 <code>wuzzle transpile<\/code> \u8f6c\u8bd1\u56fe\u7247\u6587\u4ef6<\/h2>\n<p>\u63a5\u4e0b\u6765\u6211\u4eec\u518d\u770b\u4e0b <code>wuzzle transpile<\/code> \u5bf9\u5176\u4ed6\u6587\u4ef6\u7684\u8f6c\u8bd1\uff0c\u6bd4\u5982\u56fe\u7247\u3002\u5176\u5b9e\u8fd9\u548c\u8f6c\u8bd1 <code>.ts<\/code> \u6587\u4ef6\u7c7b\u4f3c\uff0c\u90fd\u662f\u628a\u8f93\u5165\u6587\u4ef6\u6309\u7167\u6307\u5b9a\u914d\u7f6e\u8f6c\u6362\u6210 <code>.js<\/code> \u6587\u4ef6\uff0c\u4e0d\u540c\u7684\u53ea\u662f\u8f93\u5165\u6587\u4ef6\u662f\u56fe\u7247\u3002<\/p>\n<p>\u8fd9\u91cc\uff0c\u4f7f\u7528 <code>url-loader<\/code> \u5904\u7406\u56fe\u7247\uff0c\u5b89\u88c5\u4e00\u4e0b\u4f9d\u8d56\uff1a<\/p>\n<pre><code class=\"sh\">$ npm i -D url-loader<\/code><\/pre>\n<p>\u8c03\u6574 <code>wuzzle.config.js<\/code>\uff1a<\/p>\n<pre><code class=\"diff\">  webpackConfig.module = {\n    rules: [\n      {\n        test: \/\/.ts$\/,\n        loader: 'ts-loader',\n      },\n+      {\n+        test: \/\/.jpg$\/,\n+        loader: 'url-loader',\n+      },\n    ],\n  };<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u653e\u5165\u56fe\u7247 <code>src\/logo.jpg<\/code>\uff0c\u5e76\u5728 <code>src\/server.ts<\/code> \u5f15\u7528\uff1a<\/p>\n<pre><code class=\"diff\">import express from 'express';\n+import logo from '.\/logo.jpg';\n\n...\n\napp.get('\/', (req, res) =&gt; {\n-  res.send(`&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;\/head&gt;&lt;body&gt;Hello, wuzzle!&lt;\/body&gt;&lt;\/html&gt;`);\n+  res.send(`&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;head&gt;&lt;\/head&gt;&lt;body&gt;&lt;img src=&quot;${logo}&quot; \/&gt;&lt;\/body&gt;&lt;\/html&gt;`);\n});<\/code><\/pre>\n<p>\u4e3a\u4e86 TS \u7c7b\u578b\u68c0\u67e5\u80fd\u591f\u6b63\u786e\u8bc6\u522b\u56fe\u7247\u6587\u4ef6\uff0c\u521b\u5efa\u6587\u4ef6 <code>src\/modules.d.ts<\/code>\uff1a<\/p>\n<pre><code class=\"ts\">declare module '*.jpg' {\n  const o: string;\n  export default o;\n}<\/code><\/pre>\n<p>\u73b0\u5728\uff0c\u5173\u95ed\u6b63\u5728\u8fd0\u884c\u7684 <code>npm start<\/code>\u3001\u91cd\u65b0\u6267\u884c <code>npm run build<\/code>\u3001<code>npm start<\/code>\u3001\u5237\u65b0 <code>http:\/\/localhost:5000<\/code>\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\u8f6c\u8bd1\u56fe\u7247\u6587\u4ef6\u5e76\u5f15\u7528\u7684\u8fd0\u884c\u6548\u679c\u4e86\u3002<\/p>\n<h2>\u4f18\u5316\u4e0e\u8c03\u8bd5<\/h2>\n<p>\u4e0d\u96be\u53d1\u73b0\uff0c<code>dist<\/code> \u76ee\u5f55\u4e0b\u7684\u6784\u5efa\u4ea7\u7269\u5b58\u5728\u4e24\u4e2a\u5c0f\u95ee\u9898\uff1a1 \u662f\u5927\u5c0f\u6ca1\u6709\u538b\u7f29\u8fc7\uff0c2 \u662f\u6ca1\u6709\u751f\u6210 source map\u3002\u8fd9\u53ef\u4ee5\u5728 <code>package.json<\/code> \u7684\u6784\u5efa\u811a\u672c\u4e2d\u6dfb\u52a0\u53c2\u6570 <code>-p<\/code> \u548c <code>-s<\/code> \u8fdb\u884c\u4f18\u5316\uff1a<\/p>\n<pre><code class=\"diff\">  &quot;scripts&quot;: {\n    ...\n-    &quot;build&quot;: &quot;wuzzle transpile \/&quot;src\/**\/*\/&quot; -d dist&quot;\n+    &quot;build&quot;: &quot;wuzzle transpile \/&quot;src\/**\/*\/&quot; -d dist -p -s&quot;\n  }<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u8fd8\u6709\u4e2a\u5f00\u53d1\u4f53\u9a8c\u4e0a\u7684\u5c0f\u95ee\u9898\uff0c\u6bcf\u6b21\u4fee\u6539 <code>src<\/code> \u4e0b\u7684\u6587\u4ef6\u8981\u91cd\u65b0\u624b\u52a8\u7684\u6784\u5efa\u548c\u542f\u52a8\u3002\u8fd9\u53ef\u4ee5\u7ed3\u5408\u53c2\u6570 <code>-w<\/code> \u548c <a href=\"https:\/\/link.segmentfault.com\/?enc=egZ0TGJ2FTyCJjO8sFnVqQ%3D%3D.TfPIpyiEdfi8Dq%2B8J%2Fz7jDYOig9CquYLSczKBJErm6A%3D\" rel=\"nofollow\"><code>nodemon<\/code><\/a> \u6765\u89e3\u51b3\u3002<\/p>\n<p>\u5148\u5728 <code>package.json<\/code> \u5199\u5165 <code>watch<\/code> \u811a\u672c\uff1a<\/p>\n<pre><code class=\"diff\">  &quot;scripts&quot;: {\n    ...\n+    &quot;watch&quot;: &quot;wuzzle transpile \/&quot;src\/**\/*\/&quot; -d dist -w -s&quot;\n  },<\/code><\/pre>\n<p><code>watch<\/code> \u811a\u672c\u4f1a\u8fdb\u884c\u4e00\u6b21\u5b8c\u6574\u7684\u6784\u5efa\u540e\u76d1\u89c6 <code>src\/**\/*<\/code> \u4ee5\u91cd\u65b0\u6784\u5efa\u53d8\u5316\u7684\u6587\u4ef6\u3002\u5176\u4e2d\uff0c\u53c2\u6570 <code>-s<\/code> \u7528\u4e8e\u751f\u6210 source map\u3002<\/p>\n<p>\u4e4b\u540e\uff0c\u5b89\u88c5 <code>nodemon<\/code> \u4ee5\u53ca\u53e6\u4e00\u4e2a\u8f85\u52a9\u547d\u4ee4\u884c\u5de5\u5177 <a href=\"https:\/\/link.segmentfault.com\/?enc=gdJTlCTxIW3f6uFPFg7mIQ%3D%3D.M6mjIg6gP%2BJK8eswMaNxQYFIRYWV2Kbr1FzUaUoiRaqa0cr3N1rNHxUvR0IR0Rev\" rel=\"nofollow\"><code>concurrently<\/code><\/a> \u5e76\u5728 <code>package.json<\/code> \u5199\u5165 <code>dev<\/code> \u811a\u672c\uff1a<\/p>\n<pre><code class=\"sh\">$ npm i -D nodemon concurrently<\/code><\/pre>\n<pre><code class=\"diff\">  &quot;scripts&quot;: {\n    ...\n+    &quot;dev&quot;: &quot;concurrently \/&quot;npm:watch\/&quot; \/&quot;nodemon dist\/server -d 2 -w dist\/&quot;&quot;\n  }<\/code><\/pre>\n<p><code>dev<\/code> \u811a\u672c\u4f1a\u5e76\u884c\u6267\u884c <code>watch<\/code> \u811a\u672c\u548c <code>nodemon<\/code> \u547d\u4ee4\uff0c\u5f53 <code>src<\/code> \u76ee\u5f55\u4e0b\u6709\u6587\u4ef6\u53d8\u5316\u65f6 <code>dist<\/code> \u76ee\u5f55\u4e0b\u5bf9\u5e94\u6587\u4ef6\u5c31\u4f1a\u88ab\u91cd\u65b0\u6784\u5efa\uff0c\u800c\u8fd9\u5c31\u4f1a\u8ba9\u670d\u52a1\u5668\u91cd\u65b0\u542f\u52a8\u3002\u8fd9\u6837\uff0c\u5728\u8c03\u8bd5\u65f6\u5c31\u53ef\u4ee5\u7528 <code>dev<\/code> \u811a\u672c\u83b7\u5f97\u4e00\u4e2a\u66f4\u597d\u7684\u5f00\u53d1\u4f53\u9a8c\u4e86\u3002<\/p>\n<h2>\u4ec0\u4e48\u65f6\u5019\u7528 <code>wuzzle transpile<\/code><\/h2>\n<p>\u5982\u679c\u8981\u8f6c\u8bd1\u7684\u8f93\u5165\u6587\u4ef6\u4e3b\u8981\u662f <code>.js<\/code>\u3001<code>.ts<\/code> \u7b49\u811a\u672c\u6587\u4ef6\uff0ctypescript cli\u3001babel cli \u4e5f\u8bb8\u5c31\u591f\u7528\u4e86\u3002\u4f46\u5982\u679c\u9047\u5230\u50cf\u793a\u4f8b\u4e2d\u7684\u90a3\u6837\u8981\u8f6c\u8bd1\u56fe\u7247\u6216\u8005\u5176\u4ed6\u975e\u811a\u672c\u7c7b\u6587\u4ef6\u7684\u60c5\u51b5\uff0c<code>wuzzle transpile<\/code> \u4f1a\u662f\u4e2a\u5f88\u4e0d\u9519\u7684\u9009\u62e9\u3002<\/p>\n<p>\u5178\u578b\u7684\u573a\u666f\u6bd4\u5982\u505a SSR\uff08\u670d\u52a1\u7aef\u6e32\u67d3\uff09\u7684\u65f6\u5019\uff0c\u6d4f\u89c8\u5668\u7aef\u5df2\u7ecf\u914d\u7f6e\u597d\u4e86 webpack \u6253\u5305\uff0c\u670d\u52a1\u7aef\u5c31\u53ef\u4ee5\u590d\u7528\u540c\u4e00\u4e2a\u914d\u7f6e\u901a\u8fc7 <code>wuzzle transpile<\/code> \u505a JS \u8f6c\u8bd1\uff0c\u8ba9\u6d4f\u89c8\u5668\u7aef\u4ee3\u7801\u88ab\u65e0\u7f1d\u7684\u5f15\u7528\u5230\u670d\u52a1\u7aef\u3002\u540c\u65f6\uff0c\u76f8\u6bd4\u4e8e\u5728\u670d\u52a1\u7aef\u590d\u7528\u540c\u4e00\u4e2a\u914d\u7f6e\u76f4\u63a5\u8fdb\u884c webpack \u6253\u5305\uff0c\u8fd9\u80fd\u591f\u4fdd\u7559\u6784\u5efa\u524d\u540e\u7684\u76ee\u5f55\u7ed3\u6784\uff0c\u8ba9\u670d\u52a1\u7aef\u5f00\u53d1\u4fdd\u6301\u7b80\u5355\u3002<\/p>\n<p>\u6709\u5174\u8da3\u6df1\u5165\u7684\u8bdd\uff0cwuzzle \u5b98\u65b9\u793a\u4f8b <a href=\"https:\/\/link.segmentfault.com\/?enc=TqkGtzfAg4%2B%2BPB%2BnvF%2Bksg%3D%3D.P4NMnLZ6OFOpR4KOFjcTFsaRvZuMiZN7sxslx3h1sae6gWPX%2BxWBOasA4lzoRgvtyfqvxg9KDan8w2KjbQ83z8dXkiymvMZPjjBI%2B%2BSZRZDyIwEKRYp1fD%2BvOEX8KITb\" rel=\"nofollow\">e2e\/&#8230;\/react-scripts<\/a> \u63d0\u4f9b\u4e86\u7ed3\u5408\u4f7f\u7528 CRA \u548c wuzzle \u642d\u5efa\u7684\u771f\u5b9e\u5e94\u7528\uff0c\u5176\u4e2d\uff0c<code>src\/server<\/code> \u76ee\u5f55\u5b9e\u73b0\u4e86 SSR \u53ef\u4ee5\u53c2\u8003\u3002<\/p>\n<h2>\u5199\u5728\u6700\u540e<\/h2>\n<p>\u76ee\u524d\uff0c\u6587\u7ae0\u4e2d\u7684\u793a\u4f8b\u5de5\u7a0b\u5df2\u7ecf\u6536\u5f55\u5728\u4e86 <a href=\"https:\/\/link.segmentfault.com\/?enc=Q6LJsDWXUM0lwuVb7Cj%2FpA%3D%3D.cayDLts3dAKmk2iCZEGjxKwLMrO0SW5RF7UJfNbKBeOGQvYnszfFZfi70wED5Q%2F9gXGzmpHBiK3pRFf2t007vA%3D%3D\" rel=\"nofollow\">wuzzle-blog\/&#8230;\/demo<\/a>\uff0c\u8bfb\u8005\u670b\u53cb\u53ef\u4ee5\u6309\u9700\u6253\u5f00\u53c2\u8003\uff0c\u6709\u4efb\u4f55\u7591\u95ee\u6216\u60f3\u6cd5\uff0c\u6b22\u8fce\u7559\u8a00\u3002\u6b64\u5916\uff0c\u5982\u679c\u5bf9 wuzzle \u6709\u4efb\u4f55\u7591\u95ee\u6216\u60f3\u6cd5\uff0c\u6b22\u8fce\u5728 <a href=\"https:\/\/link.segmentfault.com\/?enc=Q%2B2T%2FKH7zQN56IjXPq2ciw%3D%3D.K1nVPYU%2F0nhXHJKIT8AWPVODUkA0RhJK8qsknGE79HaAE04tzr%2B7Var4s%2Bu8DZWF\" rel=\"nofollow\">wuzzle\/issues<\/a> \u65b0\u5efa issue\uff0c\u4e2d\u82f1\u6587\u90fd\u53ef\u4ee5\u3002\u5982\u679c\u6709\u5174\u8da3\u548c\u65f6\u95f4\u8d21\u732e\u4ee3\u7801\uff0c\u6b22\u8fce\u63d0\u4ea4 PR\uff0c\u5177\u4f53\u53ef\u4ee5\u53c2\u8003<a href=\"https:\/\/link.segmentfault.com\/?enc=OxZTHFD%2BaKEX0ult5Uq6EQ%3D%3D.7as3YdpH3gtgq1igdNsBeqWaRAdtu3Hxh%2BsB3i1CRYt7xG53NncXrgd9ok1Y805LwzNKPBrsITK7hljB8H0R6Cqcmz5U%2B%2BEB5Qd27VQGMk4%3D\" rel=\"nofollow\">\u5f00\u53d1\u5f15\u5bfc<\/a>\u3002\u6700\u540e\uff0c\u5982\u679c\u89c9\u5f97\u5c0f\u5de5\u5177\u6709\u5e2e\u52a9\uff0c\u53ef\u4ee5\u5728 GitHub repo <a href=\"https:\/\/link.segmentfault.com\/?enc=OuIjOAKPYdfnQcc%2B1twCwQ%3D%3D.muIvl55BfsaIHv2Pt0J83ruCNPaWTJliz9woECZgBO3FVMMDaEHDvpAv%2B2cXbpGd\" rel=\"nofollow\">wuzzle<\/a> \u70b9\u4e2a\u5c0f \u2b50\ufe0f\uff0c\u6bd4\u5fc3\u3002<\/p>\n<h2>\u66f4\u591a\u9605\u8bfb<\/h2>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000042244854\">Wuzzle\uff0c\u4e0d eject \u4e5f\u80fd\u5b9a\u5236 create-react-app \u521b\u5efa\u7684 React \u5e94\u7528<\/a><\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000042306044\">https:\/\/segmentfault.com\/a\/1190000042306044<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8f6c\u8bd1\u5668\uff08transpiler\uff09\u662f\u6307\u80fd\u591f\u8fdb\u884c\u6587\u4ef6\u5230\u6587\u4ef6\u4e00\u5bf9\u4e00\u8f6c\u6362\u7684\u7f16\u8bd1\u5668\uff08compiler\uff09\u3002\u5728 JS \u4e16\u754c\u4e2d\uff0c [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-10006182","post","type-post","status-publish","format-standard","hentry"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10006182"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006182\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10006182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10006182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10006182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}