{"id":1043,"date":"2023-03-12T09:57:30","date_gmt":"2023-03-12T01:57:30","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1043"},"modified":"2023-04-29T12:41:31","modified_gmt":"2023-04-29T04:41:31","slug":"webpack-core-concepts-and-introduction","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/12\/webpack-core-concepts-and-introduction\/","title":{"rendered":"Webpack\u6838\u5fc3\u6982\u5ff5\u53ca\u5165\u95e8"},"content":{"rendered":"<h2>\u6838\u5fc3\u6982\u5ff5<\/h2>\n<pre><code class=\"language-bash\">Entry\n|   \u4ee3\u7801\u7684\u5165\u53e3,\u6253\u5305\u7684\u5165\u53e3,\u5355\u4e2a\u6216\u591a\u4e2a\u5165\u53e3\nOutput\n|   \u6253\u5305\u6210\u7684\u6587\u4ef6(bundle) \u4e00\u4e2a\u6216\u591a\u4e2a \u81ea\u5b9a\u4e49\u89c4\u5219\nLoaders\n|   \u5904\u7406\u6587\u4ef6,\u8f6c\u5316\u4e3a\u6a21\u5757\nPlugins\n|   \u53ef\u4ee5\u53c2\u4e0e\u6574\u4e2a\u6253\u5305\u7684\u8fc7\u7a0b\n|   \u6253\u5305\u4f18\u5316\u548c\u538b\u7f29\n|   \u914d\u7f6e\u7f16\u8bd1\u65f6\u7684\u53d8\u91cf\nMode<\/code><\/pre>\n<p><!-- more --><\/p>\n<h3>Entry,Output<\/h3>\n<p>\u5b9a\u4e49\u591a\u4e2a\u5165\u53e3\u6587\u4ef6\uff0c\u8f93\u5165\u591a\u4e2a\u6587\u4ef6<\/p>\n<p>webpack.config.js<\/p>\n<pre><code class=\"language-javascript\">const webpack = require(&#039;webpack&#039;);\nconst {\n    resolve\n} = require(&#039;path&#039;);\n\nconst config = {\n    entry: {\n        index:resolve(__dirname, &#039;src\/index.js&#039;),\n        vendor:resolve(__dirname, &#039;src\/vendor.js&#039;)\n    },\n    output: {\n        path: resolve(__dirname, &#039;dist&#039;),\n        filename: &quot;[hash]-[name]-bundle.js&quot;\n    },\n    mode: &#039;development&#039;\n}\nmodule.exports = config<\/code><\/pre>\n<p>package.json<\/p>\n<pre><code class=\"language-json\">&quot;scripts&quot;: {\n    &quot;build&quot;:&quot;webpack --config webpack.config.js&quot;\n}<\/code><\/pre>\n<h3>Loader,Plugins<\/h3>\n<p>loader \u8ba9 webpack \u80fd\u591f\u53bb\u5904\u7406\u90a3\u4e9b\u975e JavaScript \u6587\u4ef6\uff08webpack \u81ea\u8eab\u53ea\u7406\u89e3 JavaScript\uff09\u3002loader \u53ef\u4ee5\u5c06\u6240\u6709\u7c7b\u578b\u7684\u6587\u4ef6\u8f6c\u6362\u4e3a webpack \u80fd\u591f\u5904\u7406\u7684\u6709\u6548<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/www.webpackjs.com\/concepts\/modules\" title=\"\u6a21\u5757\">\u6a21\u5757<\/a>\uff0c\u7136\u540e\u4f60\u5c31\u53ef\u4ee5\u5229\u7528 webpack \u7684\u6253\u5305\u80fd\u529b\uff0c\u5bf9\u5b83\u4eec\u8fdb\u884c\u5904\u7406\u3002<\/p>\n<p>\u4f8b\uff1a\u52a0\u8f7dcss<\/p>\n<pre><code class=\"language-bash\">npm i style-loader css-loader -S<\/code><\/pre>\n<pre><code class=\"language-javascript\">const webpack = require(&#039;webpack&#039;);\nconst {resolve} = require(&#039;path&#039;);\nconst {CleanWebpackPlugin} = require(&#039;clean-webpack-plugin&#039;);\nconst config = {\n    entry: {\n        index:resolve(__dirname,&#039;src\/index.js&#039;),\n        vendor:resolve(__dirname,&#039;src\/vendor.js&#039;)\n    },\n    output: {\n        path: resolve(__dirname, &#039;dist&#039;),\n        filename: &quot;[hash]-[name]-bundle.js&quot;\n    },\n    plugins: [\n        new CleanWebpackPlugin()\n    ],\n+   module: {\n+       rules: [\n+           {\n+               test: \/\\.css$\/,\n+               use: [\n+                   &#039;style-loader&#039;,\n+                   &#039;css-loader&#039;\n+               ]\n+           }\n+       ]\n+   },\n    mode: &#039;development&#039;\n}\nmodule.exports = config<\/code><\/pre>\n<pre><code class=\"language-bash\">\/\/\u5e38\u7528\u7684loader\n- \u7f16\u8bd1\u76f8\u5173\nbabel-loader ts-loader\n- \u6837\u5f0f\u76f8\u5173\nstyle-loader css-loader less-loader postcss-loader sass-loader\n- \u6587\u4ef6\u76f8\u5173\nfile-loader url-loader<\/code><\/pre>\n<h3>\u4ee3\u7801\u538b\u7f29<\/h3>\n<pre><code class=\"language-javascript\">module.exports = {\n  \/\/...\n  optimization: {\n    minimize: true\n  }\n};<\/code><\/pre>\n<h2>\u5165\u95e8\u793a\u4f8b<\/h2>\n<h3>\u521d\u59cb\u5316webpack<\/h3>\n<pre><code class=\"language-bash\">npm init -y\nnpm i webpack webpack-cli -S<\/code><\/pre>\n<p>\uff081\uff09\u65b0\u5efa<code>webpack.config.js<\/code><\/p>\n<pre><code class=\"language-javascript\">const path = require(&#039;path&#039;);\nconst config = {\n    entry:path.join(__dirname,&#039;src\/index.js&#039;),\n    output:{\n        \/* \u6253\u5305\u7684\u6587\u4ef6\u540d *\/\n        filename:&quot;bundle.js&quot;,\n        \/* \u6253\u5305\u6587\u4ef6\u7684\u8f93\u51fa\u76ee\u5f55 *\/\n        path:path.join(__dirname,&#039;dist&#039;)\n    },\n    mode:&quot;development&quot;\n}\nmodule.exports = config;<\/code><\/pre>\n<p>\uff082\uff09\u4fee\u6539<code>package.json<\/code>\u6587\u4ef6<\/p>\n<pre><code class=\"language-json\">{\n  &quot;name&quot;: &quot;webpack-test&quot;,\n  &quot;version&quot;: &quot;1.0.0&quot;,\n  &quot;description&quot;: &quot;&quot;,\n  &quot;main&quot;: &quot;index.js&quot;,\n  &quot;scripts&quot;: {\n    &quot;build&quot;: &quot;webpack --config webpack.config.js&quot;\n  },\n  &quot;dependencies&quot;: {\n    &quot;webpack&quot;: &quot;^4.41.0&quot;,\n    &quot;webpack-cli&quot;: &quot;^3.3.9&quot;,\n  }\n}<\/code><\/pre>\n<p>\uff083\uff09\u521d\u6b21\u6253\u5305<\/p>\n<pre><code class=\"language-bash\">npm run build<\/code><\/pre>\n<h3>\u914d\u7f6eplugins<\/h3>\n<pre><code class=\"language-bash\">npm i html-webpack-plugin -S\nnpm i clean-webpack-plugin -S<\/code><\/pre>\n<p>html-webpack-plugin<\/p>\n<pre><code class=\"language-javascript\">\/\/\u5728dist\u76ee\u5f55\u4e0b\u81ea\u52a8\u751f\u6210html,\u8ba9\u6253\u5305\u7684js\u6587\u4ef6\u81ea\u52a8\u63d2\u5165\nconst HtmlWebpackPlugin = require(&#039;html-webpack-plugin&#039;);\nplugins: [\n    ... \n    new HtmlWebpackPlugin({\n        title: &quot;webpack\u6d4b\u8bd5&quot;\n    })\n]<\/code><\/pre>\n<p>clean-webpack-plugin<\/p>\n<pre><code class=\"language-javascript\">\/\/\u6bcf\u6b21\u6253\u5305\u4e4b\u524d\u4f1a\u5c06dist\u76ee\u5f55\u4e0b\u7684\u6587\u4ef6\u6e05\u9664\nconst { CleanWebpackPlugin } = require(&#039;clean-webpack-plugin&#039;);\nplugins: [\n    new CleanWebpackPlugin()\n]<\/code><\/pre>\n<h3>webpack-server<\/h3>\n<pre><code class=\"language-bash\">\/\/\u5199\u4ee3\u7801\u7684\u65f6\u5019\u5c31\u53ef\u4ee5\u770b\u5230\u6548\u679c\nnpm i webpack-dev-server -S\nnpm i cross-env -S<\/code><\/pre>\n<p>\uff081\uff09\u914d\u7f6epackage.json<\/p>\n<pre><code class=\"language-json\">&quot;scripts&quot;: {\n    &quot;build&quot;: &quot;cross-env NODE_ENV=production webpack --config webpack.config.js&quot;,\n    &quot;serve&quot;:&quot;cross-env NODE_ENV=development webpack-dev-server --config webpack.config.js&quot;\n}<\/code><\/pre>\n<p>\uff082\uff09\u914d\u7f6ewebpack.config.js<\/p>\n<pre><code class=\"language-javascript\">const isDev = process.env.NODE_ENV == &#039;development&#039;\nif (isDev) {\n    config.devServer = {\n        host: &#039;localhost&#039;,\n        port: 8080,\n        \/* \u9519\u8bef\u662f\u5426\u663e\u793a\u5728\u754c\u9762\u4e0a *\/\n        overlay: {\n            errors: true\n        },\n        \/* \u662f\u5426\u8fdb\u884c\u70ed\u66f4\u65b0 *\/\n        hot: true\n    }\n}<\/code><\/pre>\n<p>\uff083\uff09\u8fd0\u884c<\/p>\n<pre><code class=\"language-bash\">npm run serve<\/code><\/pre>\n<h3>loader<\/h3>\n<pre><code class=\"language-bash\">\/\/\u5904\u7406.vue .css .png|jpg\nnpm i css-loader style-loader -S\nnpm i vue-loader vue vue-template-compiler -S\nnpm i file-loader -S<\/code><\/pre>\n<p>\uff081\uff09\u914d\u7f6ewebpack.config.js<\/p>\n<pre><code class=\"language-json\">const {VueLoaderPlugin} = require(&#039;vue-loader&#039;);\nconst config = {\n    plugins:[\n        new VueLoaderPlugin()\n    ],\n    module:{\n        rules:[\n            {\n                test:\/\\.css$\/,\n                use:[\n                    &#039;style-loader&#039;,\n                    &#039;css-loader&#039;\n                ]\n            },\n            {\n                test:\/\\.vue$\/,\n                use:&#039;vue-loader&#039;\n            },\n            {\n                test:\/\\.png|jpg|gif$\/i,\n                use:&#039;file-loader&#039;\n            }\n        ]\n    },\n    mode:&quot;development&quot;\n}<\/code><\/pre>\n<p>\uff082\uff09\u914d\u7f6esrc\/index.js<\/p>\n<pre><code class=\"language-javascript\">import Vue from &#039;vue&#039;\nimport &#039;..\/assets\/index.css&#039;;\nimport App from &#039;.\/App.vue&#039;;\nconst root = document.createElement(&quot;div&quot;);\ndocument.body.append(root)\nnew Vue({\n    render:h=&gt;h(App)\n}).$mount(root)<\/code><\/pre>\n<p>\uff083\uff09\u8fd0\u884c<\/p>\n<pre><code class=\"language-bash\">npm run serve \/\/\u67e5\u770b\u6548\u679c<\/code><\/pre>\n<h3>\u6c42\u7f51\u7edc\u6570\u636e<\/h3>\n<pre><code class=\"language-bash\">npm i axios -S<\/code><\/pre>\n<pre><code class=\"language-javascript\">&lt;script&gt;\nimport axios from &#039;axios&#039;\nexport default {\n  name: &quot;App&quot;,\n  data(){\n    return {\n      musics:[]\n    }\n  },\n  mounted() {\n    var url = &quot;http:\/\/192.168.1.19:3000\/top\/playlist?cat=appblog&quot;;\n    \/\/ this.axios(url).then(res=&gt;{\n    \/\/     console.log(res)\n    \/\/ })\n    axios.get(url).then(res=&gt;{\n        this.musics = res.data.playlists\n    })\n  }\n};\n&lt;\/script&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6838\u5fc3\u6982\u5ff5 Entry | \u4ee3\u7801\u7684\u5165\u53e3,\u6253\u5305\u7684\u5165\u53e3,\u5355\u4e2a\u6216\u591a\u4e2a\u5165\u53e3 Output | \u6253\u5305\u6210\u7684\u6587\u4ef6(bundle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[278],"class_list":["post-1043","post","type-post","status-publish","format-standard","hentry","category-node","tag-webpack"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1043","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1043"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1043\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1043"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1043"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1043"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}