From 6c81e6785d3a56c5373dd4fa246b801548b76061 Mon Sep 17 00:00:00 2001 From: Meqn Date: Thu, 14 Dec 2023 11:34:01 +0000 Subject: [PATCH] deploy: f2a97a8cd2052acbfa1456d727b59f1d43a965cb --- 404.html | 11 +- api-examples.html | 49 +++-- ...cc500bc.js => api-examples.md.408aa431.js} | 2 +- ...an.js => api-examples.md.408aa431.lean.js} | 2 +- assets/{app.be3d8a5d.js => app.caa52870.js} | 2 +- .../chunks/@localSearchIndexroot.7fa20ba2.js | 1 - .../chunks/@localSearchIndexroot.9a311053.js | 1 + ...d87b7c.js => VPLocalSearchBox.731f09d8.js} | 2 +- .../{theme.2b85349f.js => theme.3d8ad109.js} | 2 +- ...js => config_build-options.md.83f54696.js} | 2 +- ... config_build-options.md.83f54696.lean.js} | 2 +- ...d8358d1.js => config_index.md.70a8d4ed.js} | 2 +- ...an.js => config_index.md.70a8d4ed.lean.js} | 2 +- ...s => config_server-options.md.38b44b96.js} | 2 +- ...config_server-options.md.38b44b96.lean.js} | 2 +- ...s => config_shared-options.md.0b6e8efc.js} | 2 +- ...config_shared-options.md.0b6e8efc.lean.js} | 2 +- ....js => config_task-options.md.2736a7fe.js} | 6 +- ...> config_task-options.md.2736a7fe.lean.js} | 2 +- ...bca6177.js => guide_assets.md.38934978.js} | 2 +- ...an.js => guide_assets.md.38934978.lean.js} | 2 +- ...14f3acdc.js => guide_build.md.d0548d4d.js} | 2 +- ...ean.js => guide_build.md.d0548d4d.lean.js} | 2 +- ...d.cc1e1b7e.js => guide_cli.md.b7fe1365.js} | 6 +- ....lean.js => guide_cli.md.b7fe1365.lean.js} | 2 +- ...8.js => guide_env-and-mode.md.457988dd.js} | 2 +- ...=> guide_env-and-mode.md.457988dd.lean.js} | 2 +- assets/guide_help.md.f61c126f.js | 1 - assets/guide_help.md.f61c126f.lean.js | 1 - ...da7ed5a6.js => guide_index.md.df62155d.js} | 2 +- ...ean.js => guide_index.md.df62155d.lean.js} | 2 +- assets/guide_task-assets.md.6a825859.js | 13 ++ assets/guide_task-assets.md.6a825859.lean.js | 1 + assets/guide_task-assets.md.f8abe48e.js | 23 --- assets/guide_task-assets.md.f8abe48e.lean.js | 1 - ...b164.js => guide_task-html.md.5a49ced7.js} | 4 +- ...js => guide_task-html.md.5a49ced7.lean.js} | 2 +- assets/guide_task-more.md.2339473a.js | 1 - assets/guide_task-more.md.2339473a.lean.js | 1 - assets/guide_task-more.md.a1052ad8.js | 53 ++++++ assets/guide_task-more.md.a1052ad8.lean.js | 1 + ...51.js => guide_task-script.md.87f4e01c.js} | 4 +- ... => guide_task-script.md.87f4e01c.lean.js} | 2 +- assets/guide_task-server.md.3c7b4701.js | 1 + assets/guide_task-server.md.3c7b4701.lean.js | 1 + assets/guide_task-style.md.5c05796b.js | 1 - assets/guide_task-style.md.5c05796b.lean.js | 1 - assets/guide_task-style.md.90987ce7.js | 159 ++++++++++++++++ assets/guide_task-style.md.90987ce7.lean.js | 1 + ...d93b.js => guide_task-user.md.db078580.js} | 68 +++++-- ...js => guide_task-user.md.db078580.lean.js} | 2 +- assets/guide_task.md.61077b6b.js | 1 - assets/guide_task.md.61077b6b.lean.js | 1 - assets/guide_task.md.965c5267.js | 1 + assets/guide_task.md.965c5267.lean.js | 1 + assets/help.md.1e53339b.js | 1 + assets/help.md.1e53339b.lean.js | 1 + assets/index.md.3a317510.js | 1 - assets/index.md.3a317510.lean.js | 1 - assets/index.md.de590694.js | 1 + assets/index.md.de590694.lean.js | 1 + ...91.js => markdown-examples.md.9ec7908f.js} | 2 +- ... => markdown-examples.md.9ec7908f.lean.js} | 2 +- config/build-options.html | 17 +- config/index.html | 19 +- config/server-options.html | 19 +- config/shared-options.html | 17 +- config/task-options.html | 21 ++- guide/assets.html | 19 +- guide/build.html | 19 +- guide/cli.html | 21 ++- guide/env-and-mode.html | 19 +- guide/help.html | 23 --- guide/index.html | 19 +- guide/task-assets.html | 53 +++--- guide/task-html.html | 19 +- guide/task-more.html | 83 +++++++-- guide/task-script.html | 19 +- guide/task-server.html | 28 +++ guide/task-style.html | 175 +++++++++++++++++- guide/task-user.html | 83 +++++++-- guide/task.html | 17 +- hashmap.json | 2 +- help.html | 28 +++ index.html | 19 +- markdown-examples.html | 19 +- sitemap.xml | 2 +- 87 files changed, 937 insertions(+), 299 deletions(-) rename assets/{api-examples.md.3cc500bc.js => api-examples.md.408aa431.js} (97%) rename assets/{api-examples.md.3cc500bc.lean.js => api-examples.md.408aa431.lean.js} (94%) rename assets/{app.be3d8a5d.js => app.caa52870.js} (95%) delete mode 100644 assets/chunks/@localSearchIndexroot.7fa20ba2.js create mode 100644 assets/chunks/@localSearchIndexroot.9a311053.js rename assets/chunks/{VPLocalSearchBox.81d87b7c.js => VPLocalSearchBox.731f09d8.js} (99%) rename assets/chunks/{theme.2b85349f.js => theme.3d8ad109.js} (99%) rename assets/{config_build-options.md.30c53ed9.js => config_build-options.md.83f54696.js} (87%) rename assets/{config_build-options.md.30c53ed9.lean.js => config_build-options.md.83f54696.lean.js} (94%) rename assets/{config_index.md.4d8358d1.js => config_index.md.70a8d4ed.js} (99%) rename assets/{config_index.md.4d8358d1.lean.js => config_index.md.70a8d4ed.lean.js} (85%) rename assets/{config_server-options.md.b94fc321.js => config_server-options.md.38b44b96.js} (99%) rename assets/{config_server-options.md.b94fc321.lean.js => config_server-options.md.38b44b96.lean.js} (85%) rename assets/{config_shared-options.md.ebf18efd.js => config_shared-options.md.0b6e8efc.js} (96%) rename assets/{config_shared-options.md.ebf18efd.lean.js => config_shared-options.md.0b6e8efc.lean.js} (70%) rename assets/{config_task-options.md.3ea29b52.js => config_task-options.md.2736a7fe.js} (94%) rename assets/{config_task-options.md.3ea29b52.lean.js => config_task-options.md.2736a7fe.lean.js} (70%) rename assets/{guide_assets.md.0bca6177.js => guide_assets.md.38934978.js} (99%) rename assets/{guide_assets.md.0bca6177.lean.js => guide_assets.md.38934978.lean.js} (84%) rename assets/{guide_build.md.14f3acdc.js => guide_build.md.d0548d4d.js} (99%) rename assets/{guide_build.md.14f3acdc.lean.js => guide_build.md.d0548d4d.lean.js} (84%) rename assets/{guide_cli.md.cc1e1b7e.js => guide_cli.md.b7fe1365.js} (97%) rename assets/{guide_cli.md.cc1e1b7e.lean.js => guide_cli.md.b7fe1365.lean.js} (68%) rename assets/{guide_env-and-mode.md.ef70d3e8.js => guide_env-and-mode.md.457988dd.js} (99%) rename assets/{guide_env-and-mode.md.ef70d3e8.lean.js => guide_env-and-mode.md.457988dd.lean.js} (85%) delete mode 100644 assets/guide_help.md.f61c126f.js delete mode 100644 assets/guide_help.md.f61c126f.lean.js rename assets/{guide_index.md.da7ed5a6.js => guide_index.md.df62155d.js} (99%) rename assets/{guide_index.md.da7ed5a6.lean.js => guide_index.md.df62155d.lean.js} (84%) create mode 100644 assets/guide_task-assets.md.6a825859.js create mode 100644 assets/guide_task-assets.md.6a825859.lean.js delete mode 100644 assets/guide_task-assets.md.f8abe48e.js delete mode 100644 assets/guide_task-assets.md.f8abe48e.lean.js rename assets/{guide_task-html.md.77c7b164.js => guide_task-html.md.5a49ced7.js} (72%) rename assets/{guide_task-html.md.77c7b164.lean.js => guide_task-html.md.5a49ced7.lean.js} (69%) delete mode 100644 assets/guide_task-more.md.2339473a.js delete mode 100644 assets/guide_task-more.md.2339473a.lean.js create mode 100644 assets/guide_task-more.md.a1052ad8.js create mode 100644 assets/guide_task-more.md.a1052ad8.lean.js rename assets/{guide_task-script.md.f1baca51.js => guide_task-script.md.87f4e01c.js} (82%) rename assets/{guide_task-script.md.f1baca51.lean.js => guide_task-script.md.87f4e01c.lean.js} (70%) create mode 100644 assets/guide_task-server.md.3c7b4701.js create mode 100644 assets/guide_task-server.md.3c7b4701.lean.js delete mode 100644 assets/guide_task-style.md.5c05796b.js delete mode 100644 assets/guide_task-style.md.5c05796b.lean.js create mode 100644 assets/guide_task-style.md.90987ce7.js create mode 100644 assets/guide_task-style.md.90987ce7.lean.js rename assets/{guide_task-user.md.b35cd93b.js => guide_task-user.md.db078580.js} (64%) rename assets/{guide_task-user.md.b35cd93b.lean.js => guide_task-user.md.db078580.lean.js} (58%) delete mode 100644 assets/guide_task.md.61077b6b.js delete mode 100644 assets/guide_task.md.61077b6b.lean.js create mode 100644 assets/guide_task.md.965c5267.js create mode 100644 assets/guide_task.md.965c5267.lean.js create mode 100644 assets/help.md.1e53339b.js create mode 100644 assets/help.md.1e53339b.lean.js delete mode 100644 assets/index.md.3a317510.js delete mode 100644 assets/index.md.3a317510.lean.js create mode 100644 assets/index.md.de590694.js create mode 100644 assets/index.md.de590694.lean.js rename assets/{markdown-examples.md.70dfad91.js => markdown-examples.md.9ec7908f.js} (99%) rename assets/{markdown-examples.md.70dfad91.lean.js => markdown-examples.md.9ec7908f.lean.js} (85%) delete mode 100644 guide/help.html create mode 100644 guide/task-server.html create mode 100644 help.html diff --git a/404.html b/404.html index 2658c84..39f8e37 100644 --- a/404.html +++ b/404.html @@ -7,14 +7,19 @@ - + + + + + + -
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.

Released under the MIT License.

- +
Skip to content

404

PAGE NOT FOUND

But if you don't change your direction, and if you keep looking, you may end up where you are heading.

Released under the MIT License.

+ \ No newline at end of file diff --git a/api-examples.html b/api-examples.html index e184012..d1b1478 100644 --- a/api-examples.html +++ b/api-examples.html @@ -4,19 +4,24 @@ Runtime API Examples | pipflow - + - + - - + + + + + + + -
Skip to content

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
+    
Skip to content

Runtime API Examples

This page demonstrates usage of some of the runtime APIs provided by VitePress.

The main useData() API can be used to access site, theme, and page data for the current page. It works in both .md and .vue files:

md
<script setup>
 import { useData } from 'vitepress'
 
 const { theme, page, frontmatter } = useData()
@@ -48,7 +53,7 @@
 ### Page Frontmatter
 <pre>{{ frontmatter }}</pre>

Results

Theme Data

{
   "editLink": {
-    "pattern": "https://github.com/meqn/pipflow-cli/edit/main/docs/:path",
+    "pattern": "https://github.com/meqn/pipflow/edit/main/docs/:path",
     "text": "为此页提供修改建议"
   },
   "outline": {
@@ -64,11 +69,27 @@
   "nav": [
     {
       "text": "指南",
-      "link": "/guide/"
+      "link": "/guide/",
+      "activeMatch": "/guide/"
     },
     {
       "text": "配置",
-      "link": "/config/"
+      "link": "/config/",
+      "activeMatch": "/config/"
+    },
+    {
+      "text": "常见问题",
+      "link": "/help",
+      "activeMatch": "/help"
+    },
+    {
+      "text": "v0.8.1",
+      "items": [
+        {
+          "text": "Changelog",
+          "link": "https://github.com/Meqn/pipflow/releases"
+        }
+      ]
     }
   ],
   "sidebar": {
@@ -121,6 +142,10 @@
             "text": "静态资源",
             "link": "/guide/task-assets"
           },
+          {
+            "text": "server服务",
+            "link": "/guide/task-server"
+          },
           {
             "text": "自定义任务和流程",
             "link": "/guide/task-user"
@@ -137,7 +162,7 @@
       },
       {
         "text": "常见问题",
-        "link": "/guide/help"
+        "link": "/help"
       }
     ],
     "/config/": [
@@ -183,11 +208,11 @@
   "headers": [],
   "relativePath": "api-examples.md",
   "filePath": "api-examples.md",
-  "lastUpdated": 1699711149000
+  "lastUpdated": 1702347208000
 }

Page Frontmatter

{
   "outline": "deep"
-}

More

Check out the documentation for the full list of runtime APIs.

Released under the MIT License.

- +}

More

Check out the documentation for the full list of runtime APIs.

Released under the MIT License.

+ \ No newline at end of file diff --git a/assets/api-examples.md.3cc500bc.js b/assets/api-examples.md.408aa431.js similarity index 97% rename from assets/api-examples.md.3cc500bc.js rename to assets/api-examples.md.408aa431.js index 0e6b382..920c1f7 100644 --- a/assets/api-examples.md.3cc500bc.js +++ b/assets/api-examples.md.408aa431.js @@ -28,4 +28,4 @@ import{u as o,o as r,c as i,k as a,t as s,l as n,Q as c,a as e}from"./chunks/fra <pre>{{ page }}</pre> ### Page Frontmatter -<pre>{{ frontmatter }}</pre>

Results

Theme Data

`,6),h=a("h3",{id:"page-data",tabindex:"-1"},[e("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1),m=a("h3",{id:"page-frontmatter",tabindex:"-1"},[e("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1),g=a("h2",{id:"more",tabindex:"-1"},[e("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1),u=a("p",null,[e("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),e(".")],-1),x=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md","lastUpdated":1699711149000}'),f={name:"api-examples.md"},D=Object.assign(f,{setup(_){const{site:E,theme:t,page:l,frontmatter:p}=o();return(b,y)=>(r(),i("div",null,[d,a("pre",null,s(n(t)),1),h,a("pre",null,s(n(l)),1),m,a("pre",null,s(n(p)),1),g,u]))}});export{x as __pageData,D as default}; +<pre>{{ frontmatter }}</pre>

Results

Theme Data

`,6),h=a("h3",{id:"page-data",tabindex:"-1"},[e("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1),m=a("h3",{id:"page-frontmatter",tabindex:"-1"},[e("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1),g=a("h2",{id:"more",tabindex:"-1"},[e("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1),u=a("p",null,[e("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),e(".")],-1),x=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md","lastUpdated":1702347208000}'),f={name:"api-examples.md"},D=Object.assign(f,{setup(_){const{site:E,theme:t,page:l,frontmatter:p}=o();return(b,y)=>(r(),i("div",null,[d,a("pre",null,s(n(t)),1),h,a("pre",null,s(n(l)),1),m,a("pre",null,s(n(p)),1),g,u]))}});export{x as __pageData,D as default}; diff --git a/assets/api-examples.md.3cc500bc.lean.js b/assets/api-examples.md.408aa431.lean.js similarity index 94% rename from assets/api-examples.md.3cc500bc.lean.js rename to assets/api-examples.md.408aa431.lean.js index f341177..9258a4f 100644 --- a/assets/api-examples.md.3cc500bc.lean.js +++ b/assets/api-examples.md.408aa431.lean.js @@ -1 +1 @@ -import{u as o,o as r,c as i,k as a,t as s,l as n,Q as c,a as e}from"./chunks/framework.e1e0b12f.js";const d=c("",6),h=a("h3",{id:"page-data",tabindex:"-1"},[e("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1),m=a("h3",{id:"page-frontmatter",tabindex:"-1"},[e("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1),g=a("h2",{id:"more",tabindex:"-1"},[e("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1),u=a("p",null,[e("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),e(".")],-1),x=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md","lastUpdated":1699711149000}'),f={name:"api-examples.md"},D=Object.assign(f,{setup(_){const{site:E,theme:t,page:l,frontmatter:p}=o();return(b,y)=>(r(),i("div",null,[d,a("pre",null,s(n(t)),1),h,a("pre",null,s(n(l)),1),m,a("pre",null,s(n(p)),1),g,u]))}});export{x as __pageData,D as default}; +import{u as o,o as r,c as i,k as a,t as s,l as n,Q as c,a as e}from"./chunks/framework.e1e0b12f.js";const d=c("",6),h=a("h3",{id:"page-data",tabindex:"-1"},[e("Page Data "),a("a",{class:"header-anchor",href:"#page-data","aria-label":'Permalink to "Page Data"'},"​")],-1),m=a("h3",{id:"page-frontmatter",tabindex:"-1"},[e("Page Frontmatter "),a("a",{class:"header-anchor",href:"#page-frontmatter","aria-label":'Permalink to "Page Frontmatter"'},"​")],-1),g=a("h2",{id:"more",tabindex:"-1"},[e("More "),a("a",{class:"header-anchor",href:"#more","aria-label":'Permalink to "More"'},"​")],-1),u=a("p",null,[e("Check out the documentation for the "),a("a",{href:"https://vitepress.dev/reference/runtime-api#usedata",target:"_blank",rel:"noreferrer"},"full list of runtime APIs"),e(".")],-1),x=JSON.parse('{"title":"Runtime API Examples","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"api-examples.md","filePath":"api-examples.md","lastUpdated":1702347208000}'),f={name:"api-examples.md"},D=Object.assign(f,{setup(_){const{site:E,theme:t,page:l,frontmatter:p}=o();return(b,y)=>(r(),i("div",null,[d,a("pre",null,s(n(t)),1),h,a("pre",null,s(n(l)),1),m,a("pre",null,s(n(p)),1),g,u]))}});export{x as __pageData,D as default}; diff --git a/assets/app.be3d8a5d.js b/assets/app.caa52870.js similarity index 95% rename from assets/app.be3d8a5d.js rename to assets/app.caa52870.js index 888a3dd..54ff4a7 100644 --- a/assets/app.be3d8a5d.js +++ b/assets/app.caa52870.js @@ -1 +1 @@ -import{s,a1 as i,a2 as u,a3 as c,a4 as l,a5 as d,a6 as f,a7 as m,a8 as h,a9 as A,aa as g,V as P,d as v,u as y,j as w,y as C,ab as _,ac as b,ad as E,ae as R}from"./chunks/framework.e1e0b12f.js";import{t as D}from"./chunks/theme.2b85349f.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const o=p(D),j=v({name:"VitePressApp",setup(){const{site:e}=y();return w(()=>{C(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),_(),b(),E(),o.setup&&o.setup(),()=>R(o.Layout)}});async function O(){const e=T(),a=S();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",d),a.component("ClientOnly",f),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),o.enhanceApp&&await o.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function S(){return h(j)}function T(){let e=s,a;return A(t=>{let n=g(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),[])),s&&(e=!1),r},o.NotFound)}s&&O().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{O as createApp}; +import{s,a1 as i,a2 as u,a3 as c,a4 as l,a5 as d,a6 as f,a7 as m,a8 as h,a9 as A,aa as g,V as P,d as v,u as y,j as w,y as C,ab as _,ac as b,ad as E,ae as R}from"./chunks/framework.e1e0b12f.js";import{t as D}from"./chunks/theme.3d8ad109.js";function p(e){if(e.extends){const a=p(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const o=p(D),j=v({name:"VitePressApp",setup(){const{site:e}=y();return w(()=>{C(()=>{document.documentElement.lang=e.value.lang,document.documentElement.dir=e.value.dir})}),_(),b(),E(),o.setup&&o.setup(),()=>R(o.Layout)}});async function O(){const e=T(),a=S();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",d),a.component("ClientOnly",f),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),o.enhanceApp&&await o.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function S(){return h(j)}function T(){let e=s,a;return A(t=>{let n=g(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=P(()=>import(n),[])),s&&(e=!1),r},o.NotFound)}s&&O().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{O as createApp}; diff --git a/assets/chunks/@localSearchIndexroot.7fa20ba2.js b/assets/chunks/@localSearchIndexroot.7fa20ba2.js deleted file mode 100644 index 306ed45..0000000 --- a/assets/chunks/@localSearchIndexroot.7fa20ba2.js +++ /dev/null @@ -1 +0,0 @@ -const t='{"documentCount":138,"nextId":138,"documentIds":{"0":"/api-examples.html#runtime-api-examples","1":"/api-examples.html#results","2":"/api-examples.html#theme-data","3":"/api-examples.html#page-data","4":"/api-examples.html#page-frontmatter","5":"/api-examples.html#more","6":"/config/build-options.html#build-options","7":"/config/build-options.html#build-outdir","8":"/config/build-options.html#build-fileHash","9":"/config/build-options.html#build-sourcemap","10":"/config/build-options.html#build-minify","11":"/config/build-options.html#build-htmlminify","12":"/config/build-options.html#build-jsminify","13":"/config/build-options.html#build-cssminify","14":"/config/build-options.html#build-imageminify","15":"/config/#configuring-pipflow","16":"/config/#配置智能提示","17":"/config/#情景配置","18":"/config/server-options.html#server-options","19":"/config/server-options.html#server-host","20":"/config/server-options.html#server-port","21":"/config/server-options.html#server-https","22":"/config/server-options.html#server-open","23":"/config/server-options.html#server-server","24":"/config/server-options.html#server-proxy","25":"/config/server-options.html#server-middleware","26":"/config/server-options.html#server-cors","27":"/config/server-options.html#server-browser","28":"/config/server-options.html#server-ghostmode","29":"/config/server-options.html#server-notify","30":"/config/shared-options.html#shared-options","31":"/config/shared-options.html#base","32":"/config/shared-options.html#public-dir","33":"/config/shared-options.html#alias","34":"/config/shared-options.html#env-dir","35":"/config/task-options.html#task-options","36":"/config/task-options.html#name","37":"/config/task-options.html#type","38":"/config/task-options.html#input","39":"/config/task-options.html#dest","40":"/config/task-options.html#base","41":"/config/task-options.html#compiler","42":"/config/task-options.html#compiler-options","43":"/config/task-options.html#_1-html模板引擎","44":"/config/task-options.html#_2-css预处理器","45":"/config/task-options.html#minify","46":"/config/task-options.html#plugins","47":"/config/task-options.html#file-hash","48":"/config/task-options.html#sourcemap","49":"/config/task-options.html#alias","50":"/config/task-options.html#watch","51":"/config/task-options.html#filename","52":"/guide/assets.html#静态资源处理","53":"/guide/assets.html#资源文件url","54":"/guide/assets.html#public-目录","55":"/guide/assets.html#文件指纹","56":"/guide/build.html#构建生产版本","57":"/guide/build.html#浏览器兼容性","58":"/guide/build.html#browserslist","59":"/guide/build.html#polyfill","60":"/guide/build.html#自定义构建","61":"/guide/cli.html#cli","62":"/guide/cli.html#cli-create","63":"/guide/cli.html#pipflow-create","64":"/guide/cli.html#使用","65":"/guide/cli.html#选项","66":"/guide/cli.html#项目目录结构","67":"/guide/cli.html#cli-dev","68":"/guide/cli.html#pipflow-dev","69":"/guide/cli.html#使用-1","70":"/guide/cli.html#选项-1","71":"/guide/cli.html#cli-build","72":"/guide/cli.html#pipflow-build","73":"/guide/cli.html#使用-2","74":"/guide/cli.html#选项-2","75":"/guide/cli.html#cli-other","76":"/guide/cli.html#cli-task","77":"/guide/cli.html#使用-3","78":"/guide/cli.html#选项-3","79":"/guide/cli.html#cli-server","80":"/guide/cli.html#使用-4","81":"/guide/cli.html#选项-4","82":"/guide/cli.html#cli-info","83":"/guide/cli.html#使用-5","84":"/guide/env-and-mode.html#模式与环境变量","85":"/guide/env-and-mode.html#模式","86":"/guide/env-and-mode.html#环境变量","87":"/guide/env-and-mode.html#env文件","88":"/guide/help.html#常见问题","89":"/guide/help.html#安装依赖时间过长","90":"/guide/help.html#安装依赖失败","91":"/guide/#开始","92":"/guide/#总览","93":"/guide/#搭建-pipflow-项目","94":"/guide/#命令行界面","95":"/guide/#配置","96":"/guide/task-assets.html#静态资源","97":"/guide/task-assets.html#静态文件任务","98":"/guide/task-assets.html#图片任务","99":"/guide/task-assets.html#图片压缩","100":"/guide/task-html.html#html-任务","101":"/guide/task-html.html#process-flow","102":"/guide/task-html.html#环境变量处理","103":"/guide/task-html.html#html-templater","104":"/guide/task-html.html#configuration","105":"/guide/task-html.html#example","106":"/guide/task-html.html#content-compress","107":"/guide/task-more.html#其他任务","108":"/guide/task-more.html#zip压缩任务-archive","109":"/guide/task-more.html#options","110":"/guide/task-script.html#script-任务","111":"/guide/task-script.html#process-flow","112":"/guide/task-script.html#文件入口","113":"/guide/task-script.html#_1-字符串通配符","114":"/guide/task-script.html#_2-数组方式","115":"/guide/task-script.html#_3-对象方式","116":"/guide/task-script.html#babel-转译","117":"/guide/task-script.html#terser","118":"/guide/task-style.html#style-任务","119":"/guide/task-style.html#处理流程","120":"/guide/task-style.html#css-preprocessor","121":"/guide/task-style.html#postcss集成","122":"/guide/task-style.html#remtopx","123":"/guide/task-style.html#pxtorem","124":"/guide/task-style.html#pxtoview","125":"/guide/task-user.html#自定义任务和流程","126":"/guide/task-user.html#extend-task","127":"/guide/task-user.html#create-task","128":"/guide/task-user.html#_1-固定流程任务","129":"/guide/task-user.html#_2-自定义流程任务","130":"/guide/task-user.html#_2-1-plugins-方式","131":"/guide/task-user.html#_2-2-compiler-方式","132":"/guide/task-user.html#compose-task","133":"/guide/task.html#outline","134":"/markdown-examples.html#markdown-extension-examples","135":"/markdown-examples.html#syntax-highlighting","136":"/markdown-examples.html#custom-containers","137":"/markdown-examples.html#more"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,52],"1":[1,3,1],"2":[2,4,2],"3":[2,4,2],"4":[2,4,2],"5":[1,3,11],"6":[1,1,1],"7":[2,1,7],"8":[2,1,21],"9":[2,1,18],"10":[2,1,29],"11":[2,1,20],"12":[2,1,18],"13":[2,1,18],"14":[2,1,41],"15":[2,1,31],"16":[1,2,26],"17":[1,2,24],"18":[1,1,10],"19":[2,1,8],"20":[2,1,12],"21":[2,1,28],"22":[2,1,7],"23":[1,1,26],"24":[2,1,49],"25":[2,1,20],"26":[2,1,7],"27":[2,1,13],"28":[2,1,29],"29":[2,1,6],"30":[1,1,1],"31":[1,1,35],"32":[1,1,21],"33":[1,1,19],"34":[1,1,13],"35":[1,1,3],"36":[1,1,11],"37":[1,1,7],"38":[1,1,6],"39":[1,1,12],"40":[1,1,15],"41":[1,1,32],"42":[1,1,9],"43":[2,2,44],"44":[2,2,50],"45":[1,1,17],"46":[1,1,6],"47":[1,1,13],"48":[1,1,15],"49":[1,1,12],"50":[1,1,9],"51":[1,1,16],"52":[1,1,1],"53":[1,1,29],"54":[2,1,36],"55":[1,1,16],"56":[1,1,15],"57":[1,1,1],"58":[1,2,29],"59":[1,2,36],"60":[1,1,85],"61":[1,1,23],"62":[1,1,1],"63":[2,2,2],"64":[1,4,48],"65":[1,4,75],"66":[1,2,53],"67":[1,1,1],"68":[2,2,5],"69":[1,4,6],"70":[1,4,62],"71":[1,1,1],"72":[2,2,5],"73":[1,4,15],"74":[1,4,34],"75":[1,1,1],"76":[2,2,2],"77":[1,4,14],"78":[1,4,23],"79":[2,2,7],"80":[1,4,4],"81":[1,4,82],"82":[2,2,2],"83":[1,4,4],"84":[1,1,1],"85":[1,1,78],"86":[1,1,33],"87":[2,2,57],"88":[1,1,1],"89":[1,1,17],"90":[1,1,7],"91":[1,1,1],"92":[1,1,51],"93":[3,1,25],"94":[1,1,37],"95":[1,1,1],"96":[1,1,1],"97":[1,1,1],"98":[1,1,1],"99":[1,2,47],"100":[2,1,1],"101":[1,2,37],"102":[1,2,6],"103":[1,2,60],"104":[1,3,1],"105":[1,3,42],"106":[1,2,22],"107":[1,1,1],"108":[3,1,25],"109":[1,4,3],"110":[2,1,1],"111":[1,2,28],"112":[1,2,7],"113":[2,3,7],"114":[2,3,9],"115":[2,3,16],"116":[2,2,17],"117":[1,2,8],"118":[2,1,1],"119":[1,2,1],"120":[2,2,1],"121":[1,2,1],"122":[1,3,1],"123":[1,3,1],"124":[1,3,1],"125":[1,1,1],"126":[1,1,37],"127":[1,1,11],"128":[2,2,7],"129":[2,2,10],"130":[4,4,32],"131":[3,4,30],"132":[1,1,97],"133":[1,1,34],"134":[3,1,14],"135":[2,3,28],"136":[2,3,21],"137":[1,3,11]},"averageFieldLength":[1.4130434782608696,1.7608695652173911,18.93478260869566],"storedFields":{"0":{"title":"Runtime API Examples","titles":[]},"1":{"title":"Results","titles":["Runtime API Examples"]},"2":{"title":"Theme Data","titles":["Runtime API Examples","Results"]},"3":{"title":"Page Data","titles":["Runtime API Examples","Results"]},"4":{"title":"Page Frontmatter","titles":["Runtime API Examples","Results"]},"5":{"title":"More","titles":["Runtime API Examples"]},"6":{"title":"构建选项","titles":[]},"7":{"title":"build.outDir","titles":["构建选项"]},"8":{"title":"build.fileHash","titles":["构建选项"]},"9":{"title":"build.sourcemap","titles":["构建选项"]},"10":{"title":"build.minify","titles":["构建选项"]},"11":{"title":"build.htmlMinify","titles":["构建选项"]},"12":{"title":"build.jsMinify","titles":["构建选项"]},"13":{"title":"build.cssMinify","titles":["构建选项"]},"14":{"title":"build.imageMinify","titles":["构建选项"]},"15":{"title":"配置 pipflow","titles":[]},"16":{"title":"配置智能提示","titles":["配置 pipflow"]},"17":{"title":"情景配置","titles":["配置 pipflow"]},"18":{"title":"开发服务器选项","titles":[]},"19":{"title":"server.host","titles":["开发服务器选项"]},"20":{"title":"server.port","titles":["开发服务器选项"]},"21":{"title":"server.https","titles":["开发服务器选项"]},"22":{"title":"server.open","titles":["开发服务器选项"]},"23":{"title":"server.server","titles":["开发服务器选项"]},"24":{"title":"server.proxy","titles":["开发服务器选项"]},"25":{"title":"server.middleware","titles":["开发服务器选项"]},"26":{"title":"server.cors","titles":["开发服务器选项"]},"27":{"title":"server.browser","titles":["开发服务器选项"]},"28":{"title":"server.ghostMode","titles":["开发服务器选项"]},"29":{"title":"server.notify","titles":["开发服务器选项"]},"30":{"title":"共享配置","titles":[]},"31":{"title":"base","titles":["共享配置"]},"32":{"title":"publicDir","titles":["共享配置"]},"33":{"title":"alias","titles":["共享配置"]},"34":{"title":"envDir","titles":["共享配置"]},"35":{"title":"任务配置","titles":[]},"36":{"title":"name","titles":["任务配置"]},"37":{"title":"type","titles":["任务配置"]},"38":{"title":"input","titles":["任务配置"]},"39":{"title":"dest","titles":["任务配置"]},"40":{"title":"base","titles":["任务配置"]},"41":{"title":"compiler","titles":["任务配置"]},"42":{"title":"compilerOptions","titles":["任务配置"]},"43":{"title":"1. HTML模板引擎","titles":["任务配置","compilerOptions"]},"44":{"title":"2. CSS预处理器","titles":["任务配置","compilerOptions"]},"45":{"title":"minify","titles":["任务配置"]},"46":{"title":"plugins","titles":["任务配置"]},"47":{"title":"fileHash","titles":["任务配置"]},"48":{"title":"sourcemap","titles":["任务配置"]},"49":{"title":"alias","titles":["任务配置"]},"50":{"title":"watch","titles":["任务配置"]},"51":{"title":"filename","titles":["任务配置"]},"52":{"title":"静态资源处理","titles":[]},"53":{"title":"资源文件URL","titles":["静态资源处理"]},"54":{"title":"public 目录","titles":["静态资源处理"]},"55":{"title":"文件指纹","titles":["静态资源处理"]},"56":{"title":"构建生产版本","titles":[]},"57":{"title":"浏览器兼容性","titles":["构建生产版本"]},"58":{"title":"browserslist","titles":["构建生产版本","浏览器兼容性"]},"59":{"title":"Polyfill","titles":["构建生产版本","浏览器兼容性"]},"60":{"title":"自定义构建","titles":["构建生产版本"]},"61":{"title":"命令行界面","titles":[]},"62":{"title":"创建项目","titles":["命令行界面"]},"63":{"title":"pipflow create","titles":["命令行界面","创建项目"]},"64":{"title":"使用","titles":["命令行界面","创建项目","pipflow create"]},"65":{"title":"选项","titles":["命令行界面","创建项目","pipflow create"]},"66":{"title":"项目目录结构","titles":["命令行界面","创建项目"]},"67":{"title":"开发服务器","titles":["命令行界面"]},"68":{"title":"pipflow dev","titles":["命令行界面","开发服务器"]},"69":{"title":"使用","titles":["命令行界面","开发服务器","pipflow dev"]},"70":{"title":"选项","titles":["命令行界面","开发服务器","pipflow dev"]},"71":{"title":"构建","titles":["命令行界面"]},"72":{"title":"pipflow build","titles":["命令行界面","构建"]},"73":{"title":"使用","titles":["命令行界面","构建","pipflow build"]},"74":{"title":"选项","titles":["命令行界面","构建","pipflow build"]},"75":{"title":"其他","titles":["命令行界面"]},"76":{"title":"pipflow task","titles":["命令行界面","其他"]},"77":{"title":"使用","titles":["命令行界面","其他","pipflow task"]},"78":{"title":"选项","titles":["命令行界面","其他","pipflow task"]},"79":{"title":"pipflow server","titles":["命令行界面","其他"]},"80":{"title":"使用","titles":["命令行界面","其他","pipflow server"]},"81":{"title":"选项","titles":["命令行界面","其他","pipflow server"]},"82":{"title":"pipflow-info","titles":["命令行界面","其他"]},"83":{"title":"使用","titles":["命令行界面","其他","pipflow-info"]},"84":{"title":"模式与环境变量","titles":[]},"85":{"title":"模式","titles":["模式与环境变量"]},"86":{"title":"环境变量","titles":["模式与环境变量"]},"87":{"title":".env文件","titles":["模式与环境变量","环境变量"]},"88":{"title":"常见问题","titles":[]},"89":{"title":"安装依赖时间过长","titles":["常见问题"]},"90":{"title":"安装依赖失败","titles":["常见问题"]},"91":{"title":"开始","titles":[]},"92":{"title":"总览","titles":["开始"]},"93":{"title":"搭建 pipflow 项目","titles":["开始"]},"94":{"title":"命令行界面","titles":["开始"]},"95":{"title":"配置","titles":["开始"]},"96":{"title":"静态资源","titles":[]},"97":{"title":"静态文件任务","titles":["静态资源"]},"98":{"title":"图片任务","titles":["静态资源"]},"99":{"title":"图片压缩","titles":["静态资源","图片任务"]},"100":{"title":"HTML 任务","titles":[]},"101":{"title":"处理流程","titles":["HTML 任务"]},"102":{"title":"环境变量处理","titles":["HTML 任务"]},"103":{"title":"模板渲染","titles":["HTML 任务"]},"104":{"title":"渲染配置项","titles":["HTML 任务","模板渲染"]},"105":{"title":"示例","titles":["HTML 任务","模板渲染"]},"106":{"title":"内容压缩","titles":["HTML 任务"]},"107":{"title":"其他任务","titles":[]},"108":{"title":"ZIP压缩任务 (archive)","titles":["其他任务"]},"109":{"title":"options","titles":["其他任务","ZIP压缩任务 (archive)"]},"110":{"title":"script 任务","titles":[]},"111":{"title":"处理流程","titles":["script 任务"]},"112":{"title":"文件入口","titles":["script 任务"]},"113":{"title":"1. 字符串通配符","titles":["script 任务","文件入口"]},"114":{"title":"2. 数组方式","titles":["script 任务","文件入口"]},"115":{"title":"3. 对象方式","titles":["script 任务","文件入口"]},"116":{"title":"babel 转译","titles":["script 任务"]},"117":{"title":"terser","titles":["script 任务"]},"118":{"title":"style 任务","titles":[]},"119":{"title":"处理流程","titles":["style 任务"]},"120":{"title":"CSS 预处理器","titles":["style 任务"]},"121":{"title":"postcss集成","titles":["style 任务"]},"122":{"title":"remtopx","titles":["style 任务","postcss集成"]},"123":{"title":"pxtorem","titles":["style 任务","postcss集成"]},"124":{"title":"pxtoview","titles":["style 任务","postcss集成"]},"125":{"title":"自定义任务和流程","titles":[]},"126":{"title":"扩展任务","titles":["自定义任务和流程"]},"127":{"title":"创建新任务","titles":["自定义任务和流程"]},"128":{"title":"1. 固定流程任务","titles":["自定义任务和流程","创建新任务"]},"129":{"title":"2. 自定义流程任务","titles":["自定义任务和流程","创建新任务"]},"130":{"title":"2.1 plugins 方式","titles":["自定义任务和流程","创建新任务","2. 自定义流程任务"]},"131":{"title":"2.2 compiler 方式","titles":["自定义任务和流程","创建新任务","2. 自定义流程任务"]},"132":{"title":"组合任务","titles":["自定义任务和流程"]},"133":{"title":"概要","titles":[]},"134":{"title":"Markdown Extension Examples","titles":[]},"135":{"title":"Syntax Highlighting","titles":["Markdown Extension Examples"]},"136":{"title":"Custom Containers","titles":["Markdown Extension Examples"]},"137":{"title":"More","titles":["Markdown Extension Examples"]}},"dirtCount":0,"index":[["及其使用方法",{"2":{"133":1}}],["既可以在已有的任务上扩展",{"2":{"133":1}}],["删除文件任务",{"2":{"133":1}}],["删除package",{"2":{"89":1}}],["复制文件任务",{"2":{"133":1}}],["复用",{"2":{"105":2}}],["主要任务类型包含",{"2":{"133":1}}],["实现资源的自动化处理",{"2":{"133":1}}],["实例是用",{"2":{"31":1}}],["概要",{"0":{"133":1}}],["未知或不为",{"2":{"132":1}}],["脚本",{"2":{"132":1}}],["方法执行的",{"2":{"132":2}}],["方式",{"0":{"130":1,"131":1},"2":{"129":2}}],["值是一个二维数组",{"2":{"132":1}}],["值为",{"2":{"8":3}}],["入口说明",{"2":{"132":1}}],["从列显的任务中选择一些任务组合为一个新的任务",{"2":{"132":1}}],["先查看项目下的所有任务",{"2":{"132":1}}],["才会执行下一个任务",{"2":{"132":1}}],["组合任务",{"0":{"132":1},"2":{"133":1}}],["没有其他区别",{"2":{"129":1}}],["没有经过",{"2":{"54":1}}],["固定流程任务",{"0":{"128":1},"2":{"127":1}}],["插入代码",{"2":{"126":2}}],["插件文档",{"2":{"103":5}}],["插件在压缩图片过程中会自动过滤非图片文件",{"2":{"99":1}}],["插件安装依赖经常失败",{"2":{"99":1}}],["插件",{"2":{"11":1,"12":1,"13":1,"14":1,"106":1}}],["动态插入一段html源码",{"2":{"126":1}}],["输出压缩",{"2":{"126":1}}],["比如",{"2":{"126":1}}],["比如在js文件中",{"2":{"86":1}}],["扩展任务",{"0":{"126":1}}],["扩展名",{"2":{"15":1}}],["修改支持的目标浏览器",{"2":{"116":1}}],["转译",{"0":{"116":1},"2":{"116":1}}],["转译配置项",{"2":{"42":1}}],["个js文件",{"2":{"115":1}}],["个人推荐",{"2":{"103":1}}],["种方式",{"2":{"112":1}}],["数组的子项表示一个并行任务",{"2":{"132":1}}],["数组的每一项是一个任务名",{"2":{"132":1}}],["数组列表表示一个串联任务",{"2":{"132":1}}],["数组方式",{"0":{"114":1}}],["数组",{"2":{"112":1}}],["数量的最小化",{"2":{"59":1}}],["单一字符串",{"2":{"112":1}}],["单独执行某个任务",{"2":{"76":1}}],["两种方式",{"2":{"111":1}}],["zip`在dist目录中",{"2":{"108":1}}],["zip`在dist目录中pipflow",{"2":{"108":1}}],["zip`在项目的根目录",{"2":{"108":2}}],["zip",{"2":{"108":4}}],["zip压缩任务",{"0":{"108":1},"1":{"109":1}}],["参见",{"2":{"106":1}}],["参数",{"2":{"60":1}}],["您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目",{"2":{"103":1}}],["标准语法类似",{"2":{"103":1}}],["原始语法兼容",{"2":{"103":1}}],["非常适合前端开发和服务器端渲染",{"2":{"103":1}}],["非常适合快速构建静态页面",{"2":{"103":1}}],["循环和继承等高级功能",{"2":{"103":1}}],["可将javascript代码嵌入到模板中",{"2":{"103":1}}],["可以通过",{"2":{"126":1}}],["可以快速生成html代码",{"2":{"103":1}}],["可以指定额外的命令行选项",{"2":{"94":1}}],["可以指定当前服务基本目录以及索引文件",{"2":{"23":1}}],["可以直接运行",{"2":{"94":1}}],["可以直接删除",{"2":{"89":1}}],["可以扩展已有任务",{"2":{"92":1}}],["可以包含敏感变量",{"2":{"87":1}}],["可以帮助优化浏览器缓存和文件更新的管理",{"2":{"55":1}}],["可以使用",{"2":{"51":1}}],["可以用于为每个样式内容注入额外代码",{"2":{"44":1}}],["可以是一个绝对路径",{"2":{"34":1}}],["可以关闭此项功能",{"2":{"32":1}}],["可以统一禁用最小化混淆或压缩",{"2":{"10":1}}],["文档",{"2":{"103":5}}],["文件是基于",{"2":{"117":1}}],["文件来配置",{"2":{"116":1}}],["文件入口配置支持",{"2":{"112":1}}],["文件入口",{"0":{"112":1},"1":{"113":1,"114":1,"115":1}}],["文件监视",{"2":{"92":1}}],["文件应是本地的",{"2":{"87":1}}],["文件覆写",{"2":{"87":1}}],["文件配置来改变它",{"2":{"85":1}}],["文件里配置",{"2":{"58":1}}],["文件指纹",{"0":{"55":1}}],["文件哈希和版本控制",{"2":{"47":1}}],["文件最小化混淆或压缩",{"2":{"45":1}}],["文件转译工具",{"2":{"41":1}}],["文件的目录",{"2":{"34":1}}],["文件时",{"2":{"33":1}}],["文件",{"2":{"8":1,"9":2,"48":1,"58":1,"85":1,"105":2,"111":1}}],["具有简洁的语法和强大的功能",{"2":{"103":1}}],["具体配置可以查阅",{"2":{"117":1}}],["具体步骤如下",{"2":{"99":1}}],["具体参数说明请参见",{"2":{"93":1}}],["简洁而且可扩展的模板引擎",{"2":{"103":1}}],["简介",{"2":{"103":5}}],["简单易用和预设功能",{"2":{"92":1}}],["让我们来逐一介绍它们",{"2":{"103":1}}],["🤪",{"2":{"103":1}}],["写入的环境变量将会被静态替换",{"2":{"102":1}}],["写入文件系统时",{"2":{"31":1}}],["过的资源文件版本的映射",{"2":{"101":1}}],["内容压缩",{"0":{"106":1},"2":{"101":1}}],["内置一套完整的构建流程和多类型构建任务",{"2":{"133":1}}],["内置了基础的处理流程的任务",{"2":{"127":1}}],["内置了5款流行的模板引擎",{"2":{"103":1}}],["内置5款流行的模板引擎",{"2":{"92":1}}],["内置模板引擎",{"2":{"41":1}}],["内置静态服务器配置",{"2":{"23":1}}],["处理过程完全自主控制",{"2":{"127":1}}],["处理",{"2":{"101":1,"111":1}}],["处理流程",{"0":{"101":1,"111":1,"119":1}}],["处提供",{"2":{"32":1}}],["8及以上版本仅支持",{"2":{"99":1}}],["7",{"2":{"99":1}}],["7npm",{"2":{"99":1}}],["鉴于此会影响整个工程的安装运行",{"2":{"99":1}}],["且",{"2":{"99":1}}],["且图片压缩是一项耗时的一次性任务",{"2":{"14":1}}],["了解更多细节",{"2":{"94":1}}],["了解如何指定浏览器范围",{"2":{"58":1}}],["查看",{"2":{"94":1}}],["查看所有任务",{"2":{"77":2}}],["查看所有任务类型",{"2":{"37":1}}],["获得完整的命令行选项列表",{"2":{"94":1}}],["进行压缩混淆",{"2":{"117":1}}],["进行",{"2":{"116":1}}],["进行引入链接的替换",{"2":{"101":1}}],["进行便捷开发",{"2":{"61":1}}],["进入项目根目录后",{"2":{"94":1}}],["版本才能正常运行",{"2":{"93":1}}],["版本",{"2":{"93":2}}],["需要",{"2":{"93":1}}],["兼容性注意",{"2":{"93":1}}],["兼容老版本浏览器",{"2":{"92":1}}],["搭建",{"0":{"93":1}}],["使其成为基于gulp工作流的理想选择",{"2":{"92":1}}],["使用简单",{"2":{"103":1}}],["使用",{"0":{"64":1,"69":1,"73":1,"77":1,"80":1,"83":1},"2":{"20":1,"89":1}}],["温馨说明",{"2":{"92":1}}],["温馨提示",{"2":{"51":1,"59":1,"61":1}}],["极大地提升了项目之间的一致性和开发效率",{"2":{"92":1}}],["极大地简化了前端开发流程",{"2":{"92":1}}],["满足各种需求",{"2":{"92":1}}],["本地预览生产构建产物",{"2":{"94":2}}],["本地开发服务器",{"2":{"92":1}}],["本身附带",{"2":{"16":1}}],["更容易调试和版本控制",{"2":{"92":1}}],["图片资源处理任务",{"2":{"133":1}}],["图片任务",{"0":{"98":1},"1":{"99":1}}],["图片优化",{"2":{"92":1}}],["图片压缩",{"0":{"99":1},"2":{"89":1}}],["图片压缩是基于",{"2":{"14":1}}],["图片压缩配置项",{"2":{"14":1}}],["校验",{"2":{"92":1}}],["合并",{"2":{"92":2}}],["支持",{"2":{"101":1,"111":1}}],["支持https和浏览器同步测试",{"2":{"92":1}}],["支持less",{"2":{"92":1}}],["支持的",{"2":{"41":1}}],["打包压缩任务",{"2":{"133":1}}],["打包",{"2":{"92":1}}],["打印当前项目的运行环境信息",{"2":{"82":1}}],["编译",{"2":{"92":1}}],["编译阶段会被统一静态替换",{"2":{"53":1}}],["总览",{"0":{"92":1}}],["国内可能会被墙",{"2":{"90":1}}],["国内环境",{"2":{"14":1,"99":1}}],["服务器上",{"2":{"90":1}}],["很多包将源码托管在",{"2":{"90":1}}],["多数是因为网络原因",{"2":{"90":1}}],["经常碰到安装依赖失败",{"2":{"90":1}}],["我把部分依赖包抽离到外部",{"2":{"89":1}}],["我们推荐以这种方式添加",{"2":{"59":1}}],["安装",{"2":{"99":1}}],["安装依赖失败",{"0":{"90":1}}],["安装依赖时间过长",{"0":{"89":1}}],["安全注意事项",{"2":{"87":1}}],["常见问题",{"0":{"88":1},"1":{"89":1,"90":1}}],["源码的变量最终都将出现在客户端包中",{"2":{"87":1}}],["源码文件夹",{"2":{"66":2}}],["检入",{"2":{"87":1}}],["添加到你的",{"2":{"87":1}}],["想要了解解析环境文件规则的细节",{"2":{"87":1}}],["想要了解更多配置细节",{"2":{"18":1}}],["启动开发服务器",{"2":{"94":2}}],["启动一开始时被加载",{"2":{"87":1}}],["启动一个本地http服务器",{"2":{"79":1}}],["启动时已经存在的环境变量拥有最高优先级",{"2":{"87":1}}],["此外",{"2":{"87":1}}],["此选项配置后会覆盖",{"2":{"11":1,"12":1,"13":1,"14":1}}],["拥有更高的优先级",{"2":{"87":1}}],["键=值",{"2":{"87":1}}],["忽略",{"2":{"87":4}}],["相反",{"2":{"86":1}}],["相对于",{"2":{"15":1}}],["相对于项目根目录",{"2":{"7":1}}],["永远与",{"2":{"86":1}}],["应用程序包的任务",{"2":{"132":1}}],["应用是否运行在开发环境",{"2":{"86":1}}],["应用是否运行在生产环境",{"2":{"86":1}}],["应用运行的模式",{"2":{"86":1}}],["应该始终把",{"2":{"85":1}}],["应该在源码中被引用为",{"2":{"54":1}}],["如",{"2":{"86":1,"94":1}}],["如果当前主机的环境变量",{"2":{"132":1}}],["如果不满足你的业务需求",{"2":{"126":1}}],["如果开启",{"2":{"116":1}}],["如果需要则手动安装依赖并引入插件即可",{"2":{"99":1}}],["如果需要创建压缩包",{"2":{"51":1}}],["如果项目中不使用的话",{"2":{"89":1}}],["如果在本机全局安装了",{"2":{"94":1}}],["如果在环境中有默认的",{"2":{"85":1}}],["如果在未修改配置文件",{"2":{"60":1}}],["如果文件内部不包含",{"2":{"85":1}}],["如果要构建",{"2":{"60":1}}],["如果你想在",{"2":{"85":1,"126":1}}],["如果你想自定义构建流程",{"2":{"60":1}}],["如果你在执行",{"2":{"85":1}}],["如果你在创建项目时",{"2":{"65":1}}],["如果你在配置文件中开启了文件指纹",{"2":{"55":1}}],["如果你有下列这些资源",{"2":{"54":1}}],["如果你的项目不需要",{"2":{"14":1}}],["如果注入的是实际的样式而不仅仅是变量时",{"2":{"44":1}}],["如果配置文件需要基于",{"2":{"17":1}}],["如果为",{"2":{"9":2}}],["也不会混淆压缩",{"2":{"85":1}}],["也可以创建新的任务",{"2":{"133":1}}],["也可以是相对于项目根的路径",{"2":{"34":1}}],["也可以是相对于项目根目录的相对路径",{"2":{"32":1}}],["也可以通过",{"2":{"20":1}}],["也可以在每个任务项内单独配置",{"2":{"10":1}}],["还可以将已有任务和新增任务组合成新的构建任务",{"2":{"133":1}}],["还是生产",{"2":{"85":1}}],["还需要新建一个",{"2":{"85":1}}],["变量",{"2":{"85":1}}],["若想在",{"2":{"85":1}}],["渲染配置项",{"0":{"104":1}}],["渲染html模板引擎",{"2":{"101":1}}],["渲染标题",{"2":{"85":1}}],["渲染时的数据",{"2":{"43":2}}],["生成文件hash",{"2":{"111":1}}],["生成",{"2":{"111":1}}],["生成雪碧图",{"2":{"92":1}}],["生成的文件名",{"2":{"51":1}}],["生成的",{"2":{"31":1}}],["生产环境",{"2":{"86":2}}],["生产",{"2":{"85":1}}],["而不必等待一个任务完成后再执行下一个任务",{"2":{"132":1}}],["而不是在源代码中直接导入它们",{"2":{"59":1}}],["而",{"2":{"85":2}}],["💡",{"2":{"92":1}}],["👉",{"2":{"81":2}}],["🚨",{"2":{"14":1}}],["无内置流程",{"2":{"127":1}}],["无需浪费时间在重复的工程配置上",{"2":{"92":1}}],["无需其他配置",{"2":{"79":1}}],["无损压缩图片",{"2":{"92":1}}],["无论你要部署到哪个环境",{"2":{"85":1}}],["无法将其检测出来",{"2":{"59":1}}],["执行如下命令",{"2":{"132":1}}],["执行新任务",{"2":{"132":1}}],["执行",{"2":{"77":2}}],["里的",{"2":{"70":1}}],["除了通过命令行参数",{"2":{"70":1}}],["除去不可抗拒因素外",{"2":{"65":2}}],["基于以上任务类型",{"2":{"133":1}}],["基于",{"2":{"68":1,"101":1,"111":1}}],["资源文件指纹",{"2":{"101":1}}],["资源文件夹",{"2":{"66":2}}],["资源文件url",{"0":{"53":1}}],["公共静态资源服务文件夹",{"2":{"66":2}}],[">",{"2":{"65":1}}],["真不想评价",{"2":{"65":2}}],["吐槽",{"2":{"65":2}}],["环境文件是在",{"2":{"87":1}}],["环境文件加载优先级",{"2":{"87":1}}],["环境目录",{"2":{"87":1}}],["环境变量注入",{"2":{"111":1}}],["环境变量在构建时会被静态替换",{"2":{"101":1}}],["环境变量处理",{"0":{"102":1},"2":{"101":1,"111":1}}],["环境变量",{"0":{"86":1},"1":{"87":1}}],["环境",{"2":{"65":1}}],["但会被",{"2":{"87":4}}],["但是本地一定要安装",{"2":{"65":1}}],["但可以通过",{"2":{"54":1}}],["拉取模板",{"2":{"65":1}}],["拉取模板源码一直处于",{"2":{"65":1}}],["建议从",{"2":{"65":1}}],["建议用绝对路径",{"2":{"53":1}}],["状态",{"2":{"65":1}}],["◯",{"2":{"64":10}}],["0",{"2":{"64":2}}],["运行",{"2":{"93":1,"94":1}}],["运行在",{"2":{"85":1}}],["运行环境变量",{"2":{"66":2}}],["运行以下命令创建新项目",{"2":{"65":1}}],["运行以下命令来创建一个新项目",{"2":{"64":1}}],["运行下面命令即可构建生产环境应用程序包",{"2":{"60":1}}],["创建本地服务器任务",{"2":{"133":1}}],["创建自定义流程任务的方式有两种",{"2":{"129":1}}],["创建一个新任务非常简单",{"2":{"127":1}}],["创建一个新项目",{"2":{"63":1}}],["创建新任务",{"0":{"127":1},"1":{"128":1,"129":1,"130":1,"131":1}}],["创建项目",{"0":{"62":1},"1":{"63":1,"64":1,"65":1,"66":1}}],["创建的项目",{"2":{"58":1,"59":1}}],["下面我将详细介绍每一个任务类型",{"2":{"133":1}}],["下面我们将通过",{"2":{"132":1}}],["下面我们来深入介绍每个命令的使用",{"2":{"61":1}}],["下面是通过脚手架创建的",{"2":{"94":1}}],["下面是一些内建变量",{"2":{"86":1}}],["下名为",{"2":{"15":1}}],["快速搭建一个新项目",{"2":{"61":1}}],["包",{"2":{"61":1}}],["完整命令如下",{"2":{"60":1}}],["确保构建主机的环境变量",{"2":{"60":1,"132":1}}],["即可启动当前项目",{"2":{"94":1}}],["即可",{"2":{"60":1}}],["然后按照提示操作即可",{"2":{"93":1}}],["然后运行",{"2":{"60":1,"61":1}}],["然而",{"2":{"59":1,"93":1}}],["代码片段复用的示例",{"2":{"105":1}}],["代码检查",{"2":{"94":2}}],["代指你的组合任务名称",{"2":{"60":1}}],["代理选项不需要这样做",{"2":{"21":1}}],["4",{"2":{"60":2,"64":2,"135":2}}],["4567",{"2":{"24":2}}],["└──",{"2":{"60":6,"66":12}}],["└─┬",{"2":{"60":5}}],["│",{"2":{"60":8,"66":14}}],["├─┬",{"2":{"60":4}}],["├──",{"2":{"60":6,"66":38}}],["预发布环境",{"2":{"132":1}}],["预发布",{"2":{"85":1}}],["预设",{"2":{"59":1}}],["预处理器特有的选项",{"2":{"44":4}}],["预处理器的选项",{"2":{"44":1}}],["预处理器",{"0":{"120":1},"2":{"41":1}}],["一份用于指定模式的环境文件",{"2":{"87":1}}],["一个环境文件只包含环境变量的",{"2":{"87":1}}],["一个基于",{"2":{"59":1}}],["一致",{"2":{"11":1,"12":1,"13":1}}],["现在查阅",{"2":{"58":1}}],["特性和需要添加的",{"2":{"58":1}}],["用户自定义任务",{"2":{"133":1}}],["用以运行开发模式的构建",{"2":{"85":1}}],["用来确定需要转译的",{"2":{"58":1}}],["用于并行执行任务",{"2":{"132":1}}],["用于按顺序串联执行任务",{"2":{"132":1}}],["用于指定项目支持的浏览器范围",{"2":{"58":1}}],["用于渲染时所需的数据",{"2":{"43":1}}],["用于加载",{"2":{"34":1}}],["字符串内容替换",{"2":{"126":1}}],["字符串通配符",{"0":{"113":1}}],["字符串中任何特殊字符之前的路径段",{"2":{"31":1}}],["字段内添加",{"2":{"132":1}}],["字段配置开发服务器",{"2":{"70":1}}],["字段的",{"2":{"60":1}}],["字段",{"2":{"58":1}}],["你只需要在plugins中配置处理流程所需要的插件即可",{"2":{"130":1}}],["你只需要在配置文件pipflow",{"2":{"127":1}}],["你如果配置了",{"2":{"130":1}}],["你应该将",{"2":{"87":1}}],["你应该移除它或在运行",{"2":{"85":1}}],["你需要重启服务",{"2":{"87":1}}],["你也可以通过使用不同的模式和对应的",{"2":{"85":1}}],["你也可以使用",{"2":{"70":1}}],["你也可以在终端里使用",{"2":{"61":1}}],["你也可以在",{"2":{"58":1}}],["你会被提示选取需要的特性",{"2":{"64":1}}],["你可以很容易的实现各种构建任务",{"2":{"133":1}}],["你可以同时执行一系列的任务",{"2":{"132":1}}],["你可以按照顺序依次执行一系列的任务",{"2":{"132":1}}],["你可以简化成如下形式",{"2":{"130":1}}],["你可以这样写",{"2":{"86":1}}],["你可以使用",{"2":{"85":1}}],["你可以通过这个任务的",{"2":{"126":1}}],["你可以通过传递",{"2":{"85":1}}],["你可以通过运行以下命令进行探索",{"2":{"65":1}}],["你可以通过",{"2":{"61":1,"86":1,"106":1}}],["你可以通过修改项目中的",{"2":{"59":1,"116":1}}],["你可以将",{"2":{"60":1}}],["你可以创建一个",{"2":{"60":1}}],["你可以在任何目录下运行该命令",{"2":{"79":1}}],["你可以在",{"2":{"53":1,"132":1}}],["你可以显式地通过",{"2":{"15":1}}],["通过下面命令可列显所有任务",{"2":{"132":1}}],["通过parallel方法",{"2":{"132":1}}],["通过pipflow",{"2":{"92":1}}],["通过series方法",{"2":{"132":1}}],["通过",{"2":{"58":1}}],["浏览器支持列表",{"2":{"66":2}}],["浏览器前缀",{"2":{"58":1}}],["浏览器兼容性",{"0":{"57":1},"1":{"58":1,"59":1}}],["浏览器右上角的小弹窗通知",{"2":{"29":1}}],["作为一个任务函数",{"2":{"131":1}}],["作为其入口",{"2":{"56":1}}],["作为静态资源服务的文件夹",{"2":{"32":1}}],["只能安装",{"2":{"99":1}}],["只在指定模式下加载",{"2":{"87":4}}],["只需运行",{"2":{"56":1}}],["只是想得到其",{"2":{"54":1}}],["阶段有效",{"2":{"55":1}}],["阶段是否监视文件变动并重新编译",{"2":{"50":1}}],["之后引入的文件路径会携带文件指纹",{"2":{"55":1}}],["则使用",{"2":{"116":1}}],["则它会被自动排除",{"2":{"59":1}}],["则在",{"2":{"55":1}}],["则可以选择导出这样一个函数",{"2":{"17":1}}],["同时提高网站的性能和用户体验",{"2":{"55":1}}],["同时也会生成对应的",{"2":{"8":1}}],["静态替换",{"2":{"101":1,"111":1}}],["静态文件任务",{"0":{"97":1}}],["静态文件指纹是为了解决缓存问题",{"2":{"55":1}}],["静态资源",{"0":{"96":1},"1":{"97":1,"98":1,"99":1}}],["静态资源处理任务",{"2":{"133":1}}],["静态资源处理",{"0":{"52":1},"1":{"53":1,"54":1,"55":1}}],["举个例子",{"2":{"54":1}}],["根路径访问到",{"2":{"54":1}}],["它和定义一个gulp任务是一样的",{"2":{"131":1}}],["它同时支持两种模板语法",{"2":{"103":1}}],["它支持javascript语法和自定义扩展",{"2":{"103":1}}],["它支持条件语句",{"2":{"103":1}}],["它被广泛用于javascript开发中的模板渲染",{"2":{"103":1}}],["它具有易学易用的特点",{"2":{"103":1}}],["它允许您动态生成html页面",{"2":{"103":1}}],["它采用缩进和标签语法",{"2":{"103":1}}],["它们曾经都是主流",{"2":{"103":1}}],["它提供了一组开箱即用的gulp任务和功能",{"2":{"92":1}}],["它内置了诸如合并",{"2":{"92":1}}],["它的值将取决于模式",{"2":{"85":1}}],["它会自动加载",{"2":{"85":1}}],["它是基于",{"2":{"79":1}}],["它是",{"2":{"61":1}}],["它通过",{"2":{"59":1}}],["它使用标签和表达式来生成html",{"2":{"103":1}}],["它使用简单的命令就可以完成复杂的前端构建工作",{"2":{"92":1}}],["它使用",{"2":{"56":1}}],["它可以确保用户获得最新的文件版本",{"2":{"55":1}}],["它应位于你的项目根目录",{"2":{"54":1}}],["它为开发过程提供自动化",{"2":{"18":1}}],["那么请在执行的命令前加上",{"2":{"132":1}}],["那么我们来写一个",{"2":{"105":1}}],["那么构建的应用程序包的资源文件将不会进行",{"2":{"85":1}}],["那么你可以将该资源放在指定的",{"2":{"54":1}}],["那么这些样式将会在最终的打包产物中重复出现",{"2":{"44":1}}],["必须保持原有文件名",{"2":{"54":1}}],["例如",{"2":{"54":1,"85":3,"87":2}}],["不求上进的xx",{"2":{"65":2}}],["不为",{"2":{"60":1}}],["不会被源码引用",{"2":{"54":1}}],["不同于",{"2":{"33":1}}],["目录打包",{"2":{"108":4}}],["目录产生一个可用于生产环境的包",{"2":{"73":1}}],["目录默认是",{"2":{"54":1}}],["目录中",{"2":{"54":1}}],["目录",{"0":{"54":1}}],["目前仅对",{"2":{"51":1}}],["引入",{"2":{"53":1,"54":1}}],["开箱即用的前端开发工作流",{"2":{"105":2}}],["开箱即用",{"2":{"92":1}}],["开始",{"0":{"91":1},"1":{"92":1,"93":1,"94":1,"95":1}}],["开发者可以专注于代码编写",{"2":{"92":1}}],["开发者无需从零开始配置就可以立即启动前端项目的开发",{"2":{"92":1}}],["开发环境",{"2":{"86":2}}],["开发",{"2":{"85":1}}],["开发服务器",{"0":{"67":1},"1":{"68":1,"69":1,"70":1},"2":{"85":1}}],["开发服务器启动时",{"2":{"22":1}}],["开发服务器选项",{"0":{"18":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1}}],["开头",{"2":{"53":1}}],["刷新页面",{"2":{"50":1,"92":1}}],["在gulp中",{"2":{"132":1}}],["在gulp的处理过程中会自动增加文件的输入流和输出流",{"2":{"130":1}}],["在默认流程之外",{"2":{"126":1}}],["在所有情况下都可以使用",{"2":{"86":1}}],["在项目中",{"2":{"86":1}}],["在项目根目录下有一个单独的",{"2":{"58":1}}],["在某些情况下",{"2":{"85":1}}],["在你的应用中",{"2":{"85":1}}],["在当前项目下启动一个开发服务器",{"2":{"68":1}}],["在页面内通过别名+路径引入文件",{"2":{"53":1}}],["在页面中引入资源文件",{"2":{"53":1}}],["在",{"2":{"50":1,"59":1,"85":2,"99":1,"132":1}}],["在处理html",{"2":{"33":1}}],["会从你的",{"2":{"87":1}}],["会合并全局",{"2":{"49":1}}],["会自动解析",{"2":{"15":1}}],["别名替换",{"2":{"49":1,"101":1,"111":1}}],["自动检测文件变动并重新编译",{"2":{"92":1}}],["自动添加浏览器前缀",{"2":{"92":1}}],["自动在浏览器中打开应用程序",{"2":{"22":1}}],["自身也是一塌糊涂",{"2":{"65":2}}],["自定义流程任务",{"0":{"129":1},"1":{"130":1,"131":1},"2":{"127":1}}],["自定义处理流程",{"2":{"101":1,"111":1}}],["自定义任务和流程",{"0":{"125":1},"1":{"126":1,"127":1,"128":1,"129":1,"130":1,"131":1,"132":1}}],["自定义任务",{"2":{"92":1}}],["自定义任务处理流程",{"2":{"46":1}}],["自定义",{"2":{"60":1}}],["自定义构建",{"0":{"60":1}}],["压缩混淆",{"2":{"111":2}}],["压缩包",{"2":{"108":4}}],["压缩默认配置",{"2":{"106":1}}],["压缩",{"2":{"92":1}}],["压缩等",{"2":{"92":1}}],["压缩等功能",{"2":{"92":1}}],["压缩配置项",{"2":{"45":1}}],["压缩图片或者手动一次性压缩",{"2":{"14":1}}],["对于已有的任务",{"2":{"126":1}}],["对应的字符串",{"2":{"101":1,"111":1}}],["对应的混淆",{"2":{"45":1}}],["对",{"2":{"87":1}}],["对象方式",{"0":{"115":1}}],["对象来获取环境变量",{"2":{"86":1}}],["对象上设置",{"2":{"31":1,"40":1}}],["```",{"2":{"135":1}}],["``````js",{"2":{"135":1}}],["```js",{"2":{"135":1}}],["`source",{"2":{"108":2}}],["`src",{"2":{"108":2}}],["`ico`文件",{"2":{"108":2}}],["`pipflow",{"2":{"94":2}}],["`dist",{"2":{"74":2,"108":4}}],["`",{"2":{"44":4,"74":2,"108":4}}],["选项标志来覆盖命令使用的默认模式",{"2":{"85":1}}],["选项时",{"2":{"60":1}}],["选项",{"0":{"65":1,"70":1,"74":1,"78":1,"81":1},"2":{"44":5,"54":1}}],["2",{"0":{"44":1,"114":1,"129":1,"130":1,"131":2},"1":{"130":1,"131":1},"2":{"60":2}}],["其内部是通过",{"2":{"132":2}}],["其",{"2":{"132":1}}],["其他配置项",{"2":{"132":2}}],["其他模板引擎任务",{"2":{"128":2}}],["其他项目是打包的目标路径",{"2":{"109":1}}],["其他任务",{"0":{"107":1},"1":{"108":1,"109":1},"2":{"132":2}}],["其他",{"0":{"75":1},"1":{"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1}}],["其他编译选项",{"2":{"43":2}}],["其构建过程任务如下",{"2":{"60":1}}],["其值为传递给",{"2":{"43":1,"44":1}}],["16+",{"2":{"93":1}}],["13+",{"2":{"93":1}}],["14",{"2":{"93":1}}],["1└─┬",{"2":{"60":1}}],["1",{"0":{"43":1,"113":1,"128":1,"130":1},"2":{"60":1}}],["继承",{"2":{"39":1,"40":1,"45":1,"47":1,"48":1,"49":1}}],["+",{"2":{"36":1}}],["每个预处理器支持的选项可以在它们各自的文档中找到",{"2":{"44":1}}],["每个任务的单独配置项",{"2":{"35":1}}],["每一款都有自己独特的特点和用法",{"2":{"103":1}}],["每一个html模板引擎选项都包含",{"2":{"43":1}}],["每一项将会被静态替换",{"2":{"33":1}}],["任务中",{"2":{"132":1}}],["任务入口",{"2":{"132":2}}],["任务名",{"2":{"132":4}}],["任务名称",{"2":{"36":1}}],["任务",{"0":{"100":1,"110":1,"118":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1,"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1},"2":{"77":2}}],["任务索引",{"2":{"36":1}}],["任务类型有效",{"2":{"51":1}}],["任务类型",{"2":{"36":1,"37":1,"132":2}}],["任务配置",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1}}],["任何设备上的点击",{"2":{"28":1}}],["关于",{"2":{"55":1}}],["关于环境文件的更多信息",{"2":{"34":1}}],["关闭文件哈希",{"2":{"8":1}}],["功能强大",{"2":{"103":1}}],["功能",{"2":{"33":1}}],["等流程",{"2":{"126":1}}],["等",{"2":{"33":1}}],["友情提醒",{"2":{"33":1}}],["全局",{"2":{"40":1,"49":1}}],["全局字符串别名",{"2":{"33":1}}],["全局配置",{"2":{"10":1}}],["设置",{"2":{"89":2}}],["设置后会覆盖全局配置",{"2":{"35":1}}],["设置为",{"2":{"10":1,"85":1}}],["设定为",{"2":{"32":1}}],["并加入以下代码",{"2":{"99":1}}],["并未内置图片压缩功能",{"2":{"99":1}}],["并标准化了构建流程",{"2":{"92":1}}],["并不会被",{"2":{"87":1}}],["并附带开箱即用的热重载功能",{"2":{"68":1}}],["并生成能够静态部署的应用程序包",{"2":{"56":1}}],["并且打包时会被完整复制到目标目录的根目录下",{"2":{"54":1}}],["并且始终按原样提供或复制而无需进行转换",{"2":{"32":1}}],["并在构建期间复制到",{"2":{"32":1}}],["并将",{"2":{"14":1}}],["库",{"2":{"31":1}}],["以避免它们被",{"2":{"87":1}}],["以文件名或url参数形式",{"2":{"55":1}}],["以",{"2":{"53":1}}],["以保留目录结构",{"2":{"31":1}}],["以便更好的控制缓存",{"2":{"8":1}}],["当一个任务完成后",{"2":{"132":1}}],["当任务类型为",{"2":{"129":1}}],["当任务类型不为",{"2":{"128":1}}],["当你的包管理器发出警告时",{"2":{"93":1}}],["当运行",{"2":{"85":1}}],["当配置完成之后",{"2":{"60":1}}],["当需要将应用部署到生产环境时",{"2":{"56":1}}],["当转译器compiler",{"2":{"43":1,"44":1}}],["当",{"2":{"41":3}}],["当使用",{"2":{"31":1}}],["当以命令行方式运行",{"2":{"15":1}}],["集作为它们的",{"2":{"31":1}}],["由于图片压缩是一个耗时任务",{"2":{"99":1}}],["由于任何暴露给",{"2":{"87":1}}],["由于",{"2":{"85":1}}],["由于安装",{"2":{"14":1}}],["由",{"2":{"31":1,"61":1}}],["该命令会在",{"2":{"73":1}}],["该目录中的资源在开发时能直接通过",{"2":{"54":1}}],["该目录中的文件在开发期间在",{"2":{"32":1}}],["该值可以是文件系统的绝对路径",{"2":{"32":1}}],["该路径段不能是可变的",{"2":{"31":1}}],["该配置项仅对任务类型",{"2":{"10":1}}],["所有的任务会并行执行",{"2":{"132":1}}],["所有的环境变量都从对应的环境文件中载入",{"2":{"85":1}}],["所有情况下都会加载",{"2":{"87":4}}],["所有预处理器选项支持",{"2":{"44":1}}],["所有匹配",{"2":{"31":1}}],["所以当你运行",{"2":{"85":1}}],["所以你可以通过",{"2":{"16":1}}],["所以",{"2":{"14":1,"99":1}}],["因此环境变量应该不包含任何敏感信息",{"2":{"87":1}}],["因此环境文件发生变化",{"2":{"87":1}}],["因此",{"2":{"31":1}}],["因为如果这里列出的",{"2":{"59":1}}],["因为它会从目标网址中推断出来",{"2":{"21":1}}],["因为",{"2":{"16":1}}],["是用于定义任务执行顺序的两个方法",{"2":{"132":1}}],["是一种简单而灵活的模板引擎",{"2":{"103":1}}],["是一个基于gulp的前端开发工作流",{"2":{"92":1}}],["是一个全局安装的",{"2":{"61":1}}],["是开发",{"2":{"85":1}}],["是否生成",{"2":{"48":1}}],["是",{"2":{"31":2}}],["有些模板需要依赖更高的",{"2":{"93":1}}],["有关更深入的信息",{"2":{"31":1}}],["有时称为",{"2":{"31":1}}],["有效",{"2":{"10":1,"41":1}}],["属性构造的",{"2":{"31":1}}],["属性",{"2":{"31":1,"40":1,"43":1,"130":1}}],["显式地在创建的",{"2":{"31":1,"40":1}}],["共享配置",{"0":{"30":1},"1":{"31":1,"32":1,"33":1,"34":1}}],["you",{"2":{"28":2}}],["yourlocal",{"2":{"24":2}}],["your",{"2":{"24":2,"64":2}}],["滚动和表单输入都将镜像到所有其他设备",{"2":{"28":1}}],["示例",{"0":{"105":1},"2":{"27":1,"43":1,"44":1,"126":1}}],["要打开的浏览器",{"2":{"27":1}}],["中包含",{"2":{"101":1}}],["中添加的自定义",{"2":{"101":1,"111":1}}],["中找到当前任务",{"2":{"99":1}}],["中",{"2":{"87":1}}],["中可能存在的环境变量",{"2":{"85":1}}],["中间件函数或插件",{"2":{"25":1}}],["中的下列文件加载额外的环境变量",{"2":{"87":1}}],["中的资源永远应该使用根绝对路径",{"2":{"54":1}}],["中的",{"2":{"14":1,"60":1}}],["xxx",{"2":{"102":1}}],["x",{"2":{"24":2}}],["key",{"2":{"21":4,"33":1,"43":4,"44":2,"49":1}}],["warning",{"2":{"136":9}}],["watch",{"0":{"50":1},"2":{"81":6}}],["w",{"2":{"81":2}}],["which",{"2":{"81":2}}],["when",{"2":{"65":2}}],["web",{"2":{"81":2}}],["webpack",{"2":{"33":1,"116":1}}],["world",{"2":{"64":1}}],["worldpipflow",{"2":{"64":1}}],["workflow",{"2":{"43":2,"92":1}}],["works",{"2":{"0":1}}],["with",{"2":{"21":2,"23":2,"70":2,"135":1}}],["注",{"2":{"60":1}}],["注入的额外代码",{"2":{"44":4}}],["注意",{"2":{"21":1,"99":1}}],["注解也可以获取类型提示",{"2":{"16":1}}],["来获取可用于部署的应用程序",{"2":{"85":1}}],["来配置",{"2":{"54":1}}],["来设置",{"2":{"20":1}}],["来决定选项",{"2":{"17":1}}],["3",{"0":{"115":1},"2":{"60":2,"112":1,"115":1}}],["3000",{"2":{"20":1,"81":2}}],["39",{"2":{"0":4,"16":8,"17":8,"24":14,"27":4,"43":16,"44":12,"86":4,"99":8,"105":24,"113":4,"114":12,"115":28,"126":16,"130":44,"131":32,"132":40,"135":8}}],["9527",{"2":{"20":1,"70":2}}],["n",{"2":{"65":2}}],["new",{"2":{"65":2}}],["needed",{"2":{"64":2}}],["next",{"2":{"24":4,"25":2}}],["npm",{"2":{"60":1,"61":1,"94":1}}],["n$",{"2":{"44":2}}],["nunjucks文档",{"2":{"103":1}}],["nunjucks是一款功能强大的模板引擎",{"2":{"103":1}}],["nunjucks",{"2":{"41":1,"101":1,"103":2}}],["number",{"2":{"20":1}}],["name",{"0":{"36":1},"2":{"60":7,"65":6,"77":2,"78":2,"111":2,"132":2}}],["not",{"2":{"70":2,"81":2}}],["notify",{"0":{"29":1},"2":{"70":4,"81":4}}],["normalize",{"2":{"66":2}}],["no",{"2":{"65":2,"70":4,"81":4,"94":1}}],["node",{"2":{"10":1,"60":4,"85":9,"86":2,"87":2,"93":3,"132":5}}],["地址",{"2":{"19":1}}],["指定任务输出路径",{"2":{"39":1}}],["指定任务入口文件",{"2":{"38":1}}],["指定开发服务器端口",{"2":{"20":1}}],["指定服务器应该监听哪个",{"2":{"19":1}}],["指定输出路径",{"2":{"7":1}}],["请点击查看文档",{"2":{"99":1}}],["请在命令开头加上",{"2":{"60":1}}],["请注意升级你的",{"2":{"93":1}}],["请注意",{"2":{"44":1,"54":1}}],["请参见",{"2":{"34":1,"37":1,"39":1,"40":1,"41":2,"42":2,"45":1,"46":1,"47":1,"48":1,"49":1,"51":1,"54":1}}],["请参阅",{"2":{"31":1}}],["请参考",{"2":{"18":1,"87":1}}],["请删除项目的",{"2":{"14":1}}],["高效的同步与调试功能",{"2":{"18":1}}],["工具",{"2":{"18":1}}],["工具函数",{"2":{"16":1}}],["独有配置",{"2":{"17":4}}],["模板引擎渲染",{"2":{"126":1}}],["模板引擎的选项",{"2":{"43":1}}],["模板配置",{"2":{"105":1}}],["模板文件",{"2":{"105":1}}],["模板",{"2":{"103":1}}],["模板渲染",{"0":{"103":1},"1":{"104":1,"105":1},"2":{"101":1}}],["模块化",{"2":{"99":1}}],["模块化规范",{"2":{"15":1}}],["模式下被设置为",{"2":{"85":2}}],["模式下构建应用",{"2":{"85":1}}],["模式与环境变量",{"0":{"84":1},"1":{"85":1,"86":1,"87":1}}],["模式",{"0":{"85":1},"2":{"17":1,"85":2}}],["情景配置",{"0":{"17":1}}],["这两种方式除了书写方式不同之外",{"2":{"129":1}}],["这些模板引擎在过去都很流行",{"2":{"103":1}}],["这意味着当执行",{"2":{"85":1}}],["这也意味着如果其中一个依赖需要特殊的",{"2":{"59":1}}],["这确保了最终包里",{"2":{"59":1}}],["这样它会根据源代码中出现的语言特性自动检测需要的",{"2":{"59":1}}],["这样不用",{"2":{"16":1}}],["这个值会被",{"2":{"58":1}}],["这里的",{"2":{"33":1}}],["这里",{"2":{"11":1,"12":1,"13":1,"14":1,"18":1,"34":1,"37":1,"39":1,"40":1,"41":2,"42":2,"45":1,"46":1,"47":1,"48":1,"49":1,"51":1,"54":1,"55":1,"58":1,"60":1,"93":1,"106":2,"117":1}}],["这里是全局配置",{"2":{"10":1}}],["另外你可以使用",{"2":{"16":1}}],["路径进行解析",{"2":{"15":1}}],["命令创建新项目",{"2":{"93":1}}],["命令的时候明确地设置",{"2":{"85":1}}],["命令的缩写",{"2":{"61":1}}],["命令时",{"2":{"85":2}}],["命令则运行在",{"2":{"85":1}}],["命令有一些可选项",{"2":{"65":1}}],["命令行界面",{"0":{"61":1,"94":1},"1":{"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1,"83":1},"2":{"94":1}}],["命令行选项指定一个配置文件",{"2":{"15":1}}],["命令必须使用",{"2":{"60":1}}],["命令更改为",{"2":{"60":1}}],["命令来完成的",{"2":{"60":1}}],["命令",{"2":{"56":1,"61":2,"85":1}}],["命令快速生成压缩包",{"2":{"51":1}}],["命令或者不同的",{"2":{"17":1}}],["命令构建后生成的静态资源在它们的文件名中包含了",{"2":{"8":1}}],["项目中默认的",{"2":{"94":1}}],["项目",{"0":{"93":1}}],["项目目录结构",{"0":{"66":1}}],["项目配置文件仅支持",{"2":{"15":1}}],["项目根目录",{"2":{"15":1}}],["最后生成",{"2":{"115":1}}],["最后一项是打包输出的路径",{"2":{"109":1}}],["最基础的配置文件是这样的",{"2":{"15":1}}],["最小化混淆配置项",{"2":{"12":1}}],["最小化压缩配置项",{"2":{"11":1,"13":1}}],["和对象",{"2":{"112":1}}],["和为更好的缓存而做的自动的",{"2":{"73":1}}],["和",{"2":{"15":1,"16":1,"58":1,"59":1,"108":2,"111":1,"132":1}}],["仅在",{"2":{"55":1}}],["仅对任务类型为",{"2":{"41":1}}],["仅仅是字符串的别名替换",{"2":{"33":1}}],["仅支持",{"2":{"15":1}}],["仅生成版本映射文件manifest",{"2":{"8":1}}],["的值转换后的结果",{"2":{"132":1}}],["的转译选项",{"2":{"116":1}}],["的使用相对复杂一些",{"2":{"105":1}}],["的内容压缩",{"2":{"101":1}}],["的版本",{"2":{"99":1}}],["的压缩",{"2":{"73":1}}],["的首尾字母组合而成",{"2":{"61":1}}],["的其他平台环境的部署包",{"2":{"60":1}}],["的目标中不需要",{"2":{"59":1}}],["的根目录",{"2":{"32":1}}],["的路径都保证共享",{"2":{"31":1}}],["的",{"2":{"31":1,"60":1,"79":1,"132":1}}],["的本地开发服务器是基于",{"2":{"18":1}}],["的配合来实现智能提示",{"2":{"16":1}}],["的配置文件",{"2":{"15":1}}],["的安装提取到项目的依赖中",{"2":{"14":1}}],["配置中",{"2":{"130":1}}],["配置自定义构建流程",{"2":{"60":1}}],["配置来自行调整",{"2":{"59":1}}],["配置来决定项目需要的",{"2":{"59":1}}],["配置请参见",{"2":{"55":1}}],["配置文件中设置路径别名",{"2":{"53":1}}],["配置项来扩展任务",{"2":{"126":1}}],["配置项来扩展当前任务",{"2":{"126":1}}],["配置项来指定压缩选项",{"2":{"106":1}}],["配置项请点",{"2":{"117":1}}],["配置项",{"2":{"42":2}}],["配置项的值设置为",{"2":{"14":1}}],["配置智能提示",{"0":{"16":1}}],["配置选项",{"2":{"15":2}}],["配置",{"0":{"15":1,"95":1},"1":{"16":1,"17":1},"2":{"39":1,"40":1,"45":1,"47":1,"48":1,"49":2}}],["依赖",{"2":{"14":1,"89":1,"99":1}}],["依赖经常失败",{"2":{"14":1}}],["提供了终端里的",{"2":{"61":1}}],["提醒",{"2":{"14":1,"60":1,"65":1}}],["提示",{"2":{"10":1,"15":1}}],["git忽略",{"2":{"66":2}}],["gitignore",{"2":{"66":2,"87":1}}],["gitee",{"2":{"65":3}}],["github",{"2":{"65":2}}],["git",{"2":{"65":9,"87":5}}],["glob",{"2":{"31":7}}],["go",{"2":{"28":2}}],["google",{"2":{"27":2}}],["ghostmode",{"0":{"28":1},"2":{"28":4}}],["gulp",{"2":{"14":4,"43":2,"89":1,"99":8,"103":5,"126":4,"130":12,"131":10}}],["gt",{"2":{"0":16,"17":2,"53":8,"54":1,"56":1,"60":15,"64":8,"65":4,"70":6,"74":4,"77":2,"81":6,"105":36}}],["javascript处理任务",{"2":{"133":1}}],["javascript语法转换",{"2":{"92":1}}],["javascript",{"2":{"12":1,"33":1,"58":1,"103":1,"116":1,"117":1}}],["jsexport",{"2":{"135":1}}],["jsseries",{"2":{"132":1}}],["js的tasks中增加一条任务项即可",{"2":{"127":1}}],["jsdist",{"2":{"115":1}}],["jsdoc",{"2":{"16":2}}],["jsconst",{"2":{"99":1,"126":1}}],["jsif",{"2":{"86":1}}],["jsimport",{"2":{"16":1}}],["js文件夹",{"2":{"66":2}}],["jsmodule",{"2":{"17":1}}],["jsminify",{"0":{"12":1}}],["jspipflow",{"2":{"15":1}}],["js",{"2":{"15":6,"16":1,"21":1,"23":1,"24":1,"25":1,"27":1,"28":1,"31":3,"43":3,"44":3,"53":1,"59":2,"60":1,"66":10,"70":1,"73":1,"93":1,"99":1,"101":1,"105":3,"106":1,"111":1,"113":3,"114":7,"115":14,"116":1,"128":1,"130":6,"131":3,"132":5}}],["js最小化混淆是基于",{"2":{"12":1}}],["json中的",{"2":{"89":1}}],["json",{"2":{"8":3,"14":1,"15":1,"53":3,"58":1,"60":2,"66":2,"94":1,"101":1,"132":2}}],["详细配置请参见",{"2":{"11":1,"12":1,"13":1,"14":1,"60":1,"106":1}}],["与",{"2":{"11":1,"12":1,"13":1}}],["highlighted",{"2":{"135":4}}],["highlighting",{"0":{"135":1},"2":{"135":2}}],["hits",{"2":{"24":2}}],["h1",{"2":{"105":4}}],["hbs",{"2":{"105":8}}],["hb",{"2":{"103":1}}],["hmr",{"2":{"70":2}}],["h",{"2":{"65":2,"70":2,"74":2,"78":2,"81":2}}],["head",{"2":{"105":4}}],["headers",{"2":{"81":2}}],["header",{"2":{"24":2,"105":10}}],["help",{"2":{"65":5,"70":6,"74":6,"78":6,"81":6,"94":1}}],["helppipflow",{"2":{"65":1}}],["hello",{"2":{"64":2,"105":2}}],["here",{"2":{"28":2}}],["handlebars文档",{"2":{"103":1}}],["handlebars是一种语法简洁的模板引擎",{"2":{"103":1}}],["handlebars",{"2":{"41":1,"101":1,"103":1,"105":4}}],["handle",{"2":{"25":4}}],["hash",{"2":{"8":1,"54":1,"73":1,"85":1,"101":1,"111":2}}],["http",{"2":{"24":4,"81":2}}],["https",{"0":{"21":1},"2":{"21":9,"70":2,"81":4}}],["html处理任务",{"2":{"133":1}}],["html的压缩是基于",{"2":{"106":1}}],["html内容中的以",{"2":{"102":1}}],["html模板渲染",{"2":{"92":1}}],["html模板引擎时",{"2":{"43":1}}],["html模板引擎",{"0":{"43":1},"2":{"41":1,"42":1}}],["html文件夹",{"2":{"66":2}}],["html压缩是基于",{"2":{"11":1}}],["htmlminifyoptions",{"2":{"11":1}}],["htmlminify",{"0":{"11":1},"2":{"106":1}}],["html",{"0":{"100":1},"1":{"101":1,"102":1,"103":1,"104":1,"105":1,"106":1},"2":{"10":1,"11":2,"23":2,"41":2,"43":1,"53":3,"56":1,"60":2,"64":2,"66":2,"73":1,"101":1,"105":13,"106":1,"126":6,"128":2,"132":2,"133":1}}],["hostname",{"2":{"70":2,"81":2}}],["host",{"0":{"19":1},"2":{"70":2,"81":4}}],["为了方便发布",{"2":{"132":1}}],["为生产环境构建产物",{"2":{"94":2}}],["为开发服务器配置",{"2":{"26":1}}],["为开发服务器配置自定义代理规则",{"2":{"24":1}}],["为本地主机开发启用",{"2":{"21":1}}],["为",{"2":{"10":1,"41":6,"43":1,"44":1,"60":1,"89":1,"132":1}}],["⚠️",{"2":{"10":1}}],["quot",{"2":{"10":2,"21":12,"23":12,"24":8,"25":4,"32":2,"53":28,"59":2,"60":36,"65":4,"70":4,"74":4,"81":4,"85":6,"94":36,"132":28}}],["embedded",{"2":{"103":1}}],["esmodule",{"2":{"99":1}}],["eslint配置",{"2":{"66":2}}],["eslintrc",{"2":{"66":2}}],["eslint忽略",{"2":{"66":2}}],["eslintignore",{"2":{"66":2}}],["every",{"2":{"81":2}}],["element",{"2":{"70":2,"81":2}}],["else",{"2":{"17":2,"86":2}}],["ejs文档",{"2":{"103":1}}],["ejs",{"2":{"41":1,"101":1,"103":4}}],["each",{"2":{"28":2}}],["enter",{"2":{"64":2}}],["end",{"2":{"43":2,"131":2}}],["enable",{"2":{"21":4,"28":2,"70":4,"81":2}}],["env文件",{"0":{"87":1}}],["env=developmentapp",{"2":{"87":1}}],["env=development",{"2":{"85":3,"87":1}}],["env=production",{"2":{"60":3,"132":3}}],["envdir",{"0":{"34":1}}],["env",{"2":{"10":2,"34":1,"58":2,"59":1,"60":4,"66":2,"70":2,"74":2,"85":16,"86":10,"87":13,"102":1,"132":5}}],["export",{"2":{"135":3}}],["exports",{"2":{"15":2,"16":4,"17":2,"43":2,"44":2,"99":2,"105":2,"126":2,"130":4,"131":2,"132":2}}],["extensions",{"2":{"134":1,"137":1}}],["extension",{"0":{"134":1},"1":{"135":1,"136":1,"137":1}}],["example",{"2":{"77":2,"108":2}}],["examples",{"0":{"0":1,"134":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"135":1,"136":1,"137":1}}],["exists",{"2":{"65":4}}],["附加在输出文件中",{"2":{"9":1}}],["utils",{"2":{"114":2,"115":2}}],["underscore",{"2":{"103":1}}],["url=http",{"2":{"87":2}}],["url",{"2":{"54":1}}],["uri",{"2":{"9":1}}],["using",{"2":{"24":2}}],["user",{"2":{"128":1,"129":1,"130":4,"131":2,"133":1}}],["userconfig",{"2":{"16":2}}],["use",{"2":{"65":2,"81":4}}],["usebuiltins",{"2":{"59":1}}],["used",{"2":{"0":1,"81":2}}],["usedata",{"2":{"0":5}}],["usage",{"2":{"0":1,"59":1,"70":2,"74":2,"78":2,"81":2}}],["将处理流程写在",{"2":{"130":1}}],["将构建后通过生成的",{"2":{"101":1}}],["将会比一般的环境文件",{"2":{"87":1}}],["将会创建一个独立的",{"2":{"9":1}}],["将决定您的应用运行的模式",{"2":{"85":1}}],["将从输出路径中删除",{"2":{"31":1}}],["将",{"2":{"14":1,"32":1,"108":4,"131":1}}],["将作为一个",{"2":{"9":1}}],["将生成文件名哈希和版本映射文件manifest",{"2":{"8":1}}],["构建用于预发布环境的应用程序包",{"2":{"132":1}}],["构建",{"0":{"71":1},"1":{"72":1,"73":1,"74":1},"2":{"116":1}}],["构建生产环境应用程序包默认是通过",{"2":{"60":1}}],["构建生产版本",{"0":{"56":1},"1":{"57":1,"58":1,"59":1,"60":1},"2":{"72":1}}],["构建后的内容",{"2":{"53":2}}],["构建后是否生成",{"2":{"9":1}}],["构建选项",{"0":{"6":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1}}],["或者调整",{"2":{"116":1}}],["或者",{"2":{"69":2,"130":1}}],["或者超时失败",{"2":{"65":1}}],["或者你压根不想引入该资源",{"2":{"54":1}}],["或",{"2":{"8":1,"17":1,"45":1,"94":1}}],["时为自定义流程任务",{"2":{"129":1}}],["时为固定流程任务",{"2":{"128":1}}],["时将环境变量设定为",{"2":{"85":1}}],["时运行不同的模式来渲染不同的标题",{"2":{"85":1}}],["时",{"2":{"8":3,"15":1,"41":3,"85":1}}],["|",{"2":{"8":2,"9":1,"11":1,"12":1,"13":1,"14":1,"23":2,"24":1,"25":1,"27":1,"32":1,"38":2,"45":1,"47":2}}],["默认运行生产模式构建",{"2":{"85":1}}],["默认带有",{"2":{"73":1}}],["默认入口页面",{"2":{"66":2}}],["默认情况下",{"2":{"56":1,"59":2,"85":1}}],["默认为",{"2":{"36":1,"72":1}}],["默认",{"2":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"31":1,"32":1,"34":1,"36":1,"39":1,"40":1,"45":1,"47":1,"48":1,"50":1,"51":1}}],["类型任务中增加其他处理流程",{"2":{"126":1}}],["类型的任务默认处理流程会包含",{"2":{"126":1}}],["类型的组合任务来创建一个构建",{"2":{"132":1}}],["类型的组合任务",{"2":{"60":1}}],["类型",{"2":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"16":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1,"51":1}}],["l",{"2":{"78":2}}],["lodash",{"2":{"103":1}}],["local",{"2":{"70":2,"81":4,"87":6}}],["localhost",{"2":{"19":1,"24":4}}],["logo",{"2":{"66":4}}],["loading",{"2":{"65":1}}],["like",{"2":{"135":1}}],["line",{"2":{"81":2,"135":1}}],["lint",{"2":{"77":4,"94":4}}],["linter",{"2":{"64":2}}],["listpipflow",{"2":{"77":1,"132":1}}],["list",{"2":{"5":1,"77":1,"78":6,"132":1,"137":1}}],["less",{"2":{"41":1,"44":1}}],["lt",{"2":{"0":16,"53":8,"54":1,"56":1,"60":15,"64":8,"65":4,"70":6,"74":4,"77":2,"81":6,"99":1,"105":34}}],["on",{"2":{"70":4,"81":6,"131":2}}],["one",{"2":{"28":2}}],["overwrite",{"2":{"65":2}}],["or",{"2":{"28":2}}],["object",{"2":{"23":1,"38":1,"42":1}}],["open",{"0":{"22":1},"2":{"70":8,"81":8,"94":1}}],["options",{"0":{"109":1},"2":{"14":2,"65":4,"70":4,"74":4,"78":4,"81":4,"99":2,"108":2}}],["output",{"2":{"135":1,"136":1}}],["outdir",{"0":{"7":1},"2":{"32":1,"39":1}}],["out",{"2":{"5":1,"137":1}}],["off",{"2":{"28":2}}],["of",{"2":{"0":2,"5":1,"134":1,"137":1}}],["run",{"2":{"60":1,"78":2}}],["runtime",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"5":1}}],["robots",{"2":{"54":1,"66":2}}],["root",{"2":{"34":1,"54":1,"56":1,"81":2}}],["route",{"2":{"25":4}}],["replace",{"2":{"126":4}}],["repo=gitee",{"2":{"65":1}}],["repository",{"2":{"65":2}}],["repo",{"2":{"65":2}}],["remtopx",{"0":{"122":1}}],["remove",{"2":{"133":1}}],["removeemptyattributes",{"2":{"106":2}}],["removecomments",{"2":{"106":2}}],["remote",{"2":{"65":2}}],["ready",{"2":{"74":2}}],["readme",{"2":{"66":2}}],["require",{"2":{"99":2,"126":4,"130":6,"131":4,"132":2}}],["requests",{"2":{"25":2}}],["request",{"2":{"24":2,"81":2}}],["req",{"2":{"24":4,"25":2}}],["res",{"2":{"24":4,"25":2}}],["response",{"2":{"24":4}}],["results",{"0":{"1":1},"1":{"2":1,"3":1,"4":1},"2":{"0":2}}],["returned",{"2":{"24":2}}],["return",{"2":{"17":4,"131":2,"135":4}}],["=7",{"2":{"99":1}}],["===",{"2":{"10":1,"17":4,"86":2}}],["=",{"2":{"0":2,"15":2,"16":4,"17":4,"43":2,"44":2,"99":4,"105":2,"126":6,"130":10,"131":6,"132":4}}],["favicon",{"2":{"66":2,"108":2}}],["false",{"2":{"8":2,"9":1,"10":1,"14":1,"21":1,"24":1,"25":1,"26":1,"28":5,"32":2,"45":1,"47":1,"48":1,"50":1,"70":2,"81":2,"89":1}}],["fetching",{"2":{"65":2}}],["features",{"2":{"64":2,"135":1}}],["feature",{"2":{"28":2}}],["f",{"2":{"65":2,"81":2}}],["foobar",{"2":{"24":2}}],["force",{"2":{"65":2}}],["formatter",{"2":{"64":1}}],["formatterpipflow",{"2":{"64":1}}],["forms",{"2":{"28":2}}],["for",{"2":{"0":1,"5":1,"21":2,"64":2,"65":2,"70":6,"74":2,"78":2,"81":6,"137":1}}],["function",{"2":{"24":6,"25":4,"46":1}}],["full",{"2":{"5":1,"137":1}}],["file",{"2":{"70":2,"73":1,"74":2,"81":4}}],["filename",{"0":{"51":1},"2":{"23":2,"81":2}}],["filehash",{"0":{"8":1,"47":1},"2":{"47":1,"55":1}}],["files",{"2":{"0":1,"23":4,"81":4}}],["front",{"2":{"43":2}}],["frontmatter",{"0":{"4":1},"2":{"0":6,"4":1}}],["from",{"2":{"0":2,"16":2,"23":4,"24":2}}],["v0",{"2":{"64":2}}],["variables",{"2":{"44":2}}],["views",{"2":{"66":2,"105":4}}],["vite",{"2":{"33":1}}],["vitepress",{"2":{"0":3,"134":1,"135":1}}],["vinyl",{"2":{"31":2,"40":1}}],["vue",{"2":{"0":1}}],["msg",{"2":{"135":4}}],["mjs",{"2":{"113":2}}],["mustache",{"2":{"103":1}}],["mpmrc",{"2":{"89":1}}],["merge",{"2":{"65":4}}],["middleware",{"0":{"25":1},"2":{"24":2,"25":4}}],["minifier",{"2":{"11":1,"101":1,"106":1}}],["minifycss",{"2":{"106":2}}],["minifyjs",{"2":{"106":2}}],["minifyoptions",{"2":{"45":1}}],["minify",{"0":{"10":1,"45":1},"2":{"10":1,"11":2,"12":2,"13":2,"14":1,"45":1}}],["my",{"2":{"15":2,"65":1,"93":2}}],["modify",{"2":{"24":6}}],["mode=stagingpipflow",{"2":{"132":1}}],["mode=staging",{"2":{"60":1,"132":3}}],["mode=stagingcross",{"2":{"60":1}}],["mode=production",{"2":{"60":4}}],["mode=productionpipflow",{"2":{"60":1}}],["mode",{"2":{"17":2,"21":4,"60":1,"70":6,"72":1,"74":6,"85":3,"86":1,"87":4}}],["module",{"2":{"15":2,"16":4,"17":1,"43":2,"44":2,"99":2,"105":2,"126":2,"130":4,"131":2,"132":2}}],["more",{"0":{"5":1,"137":1},"2":{"81":2}}],["markdown",{"0":{"134":1},"1":{"135":1,"136":1,"137":1},"2":{"134":1,"137":1}}],["map",{"2":{"9":3,"48":1,"111":1}}],["manifest",{"2":{"8":1,"101":1}}],["main",{"2":{"0":1}}],["md",{"2":{"0":2,"66":2,"136":1}}],["is",{"2":{"136":15}}],["io",{"2":{"81":2}}],["ico",{"2":{"66":2,"108":2}}],["icon",{"2":{"54":2}}],["i",{"2":{"64":2}}],["ip",{"2":{"19":1}}],["if",{"2":{"17":2,"65":4,"86":1}}],["ide",{"2":{"16":1}}],["img",{"2":{"53":8}}],["images",{"2":{"53":4}}],["imagemin",{"2":{"14":4,"89":1,"99":12}}],["imageminify",{"0":{"14":1},"2":{"14":1,"89":1}}],["image",{"2":{"10":1,"64":2,"132":2,"133":1}}],["import",{"2":{"0":2,"16":3,"44":2}}],["includes",{"2":{"105":4}}],["install",{"2":{"99":2}}],["infopipflow",{"2":{"83":1}}],["info",{"0":{"82":1},"1":{"83":1},"2":{"83":1,"136":6}}],["initialization",{"2":{"65":2}}],["invert",{"2":{"64":2}}],["interface",{"2":{"43":1,"44":1}}],["input入口和其他类型任务有些不同",{"2":{"132":1}}],["input",{"0":{"38":1},"2":{"105":2,"113":2,"114":2,"115":2,"126":2,"130":3,"132":4,"135":1,"136":1}}],["individually",{"2":{"28":2}}],["index",{"2":{"23":6,"36":1,"56":1,"66":6,"70":4,"81":4,"105":2,"115":10}}],["inline",{"2":{"9":2}}],["in",{"2":{"0":1,"28":2,"70":4,"74":2,"81":2,"134":1}}],["it",{"2":{"0":1,"24":4,"65":4}}],["cnpm",{"2":{"89":1}}],["clone",{"2":{"65":5}}],["clicks",{"2":{"28":2}}],["cli",{"2":{"20":1,"59":1,"61":2,"64":2,"65":2,"94":1}}],["c",{"2":{"65":2}}],["cross",{"2":{"60":2,"132":3}}],["create",{"0":{"63":1},"1":{"64":1,"65":1},"2":{"58":1,"61":1,"64":2,"65":8,"93":3}}],["crt",{"2":{"21":2}}],["changes",{"2":{"81":2}}],["chrome",{"2":{"27":2}}],["check",{"2":{"5":1,"64":2,"137":1}}],["cert",{"2":{"21":2}}],["certificates",{"2":{"21":2}}],["custom",{"0":{"136":1},"2":{"21":6}}],["current",{"2":{"0":1,"70":2}}],["cwd",{"2":{"15":1}}],["collapsebooleanattributes",{"2":{"106":2}}],["collapsewhitespace",{"2":{"106":2}}],["color",{"2":{"44":2}}],["copy",{"2":{"60":2,"132":2,"133":1}}],["com",{"2":{"87":2}}],["compileoptions",{"2":{"105":2}}],["compileroptions",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"43":4,"44":4}}],["compiler",{"0":{"41":1,"131":1},"2":{"41":3,"43":2,"44":2,"105":2,"129":1,"131":3}}],["compress",{"2":{"64":2}}],["compose",{"2":{"60":8,"132":4,"133":1}}],["comm",{"2":{"44":2,"115":4}}],["command➜",{"2":{"70":1,"74":1,"78":1,"81":1}}],["commandusage",{"2":{"65":1}}],["command",{"2":{"17":6,"65":1,"70":1,"74":1,"78":1,"81":3}}],["commonjs",{"2":{"15":1}}],["cors",{"0":{"26":1},"2":{"26":1,"70":4,"81":2}}],["containers",{"0":{"136":1}}],["control",{"2":{"81":2}}],["concat",{"2":{"130":12,"131":6}}],["configuration",{"2":{"70":2,"74":2}}],["config",{"2":{"15":8,"43":2,"44":2,"53":3,"59":2,"60":1,"66":6,"70":3,"74":2,"99":1,"101":1,"105":2,"111":1,"116":1,"127":1,"130":4,"131":2,"132":2}}],["const",{"2":{"0":2,"99":1,"126":3,"130":6,"131":4,"132":2}}],["css处理任务",{"2":{"133":1}}],["css预处理",{"2":{"92":1}}],["css预处理器时",{"2":{"44":1}}],["css预处理器",{"0":{"44":1},"2":{"41":1,"42":1}}],["css文件夹",{"2":{"66":2}}],["cssnano",{"2":{"13":1}}],["cssnanooptions",{"2":{"13":1}}],["css压缩是基于",{"2":{"13":1}}],["css",{"0":{"120":1},"2":{"13":1,"33":1,"41":1,"44":1,"53":2,"58":1,"64":2,"66":2,"73":1,"130":8,"131":4,"132":2}}],["cssminify",{"0":{"13":1}}],["can",{"2":{"0":1,"28":2}}],["dangerous",{"2":{"136":3}}],["danger",{"2":{"136":3}}],["data",{"0":{"2":1,"3":1},"2":{"0":5,"9":1,"43":5,"105":2,"135":4}}],["d",{"2":{"99":2}}],["done",{"2":{"131":4}}],["dom",{"2":{"126":2}}],["dotenv",{"2":{"87":1}}],["docs",{"2":{"81":2}}],["documentation",{"2":{"5":1,"137":1}}],["display",{"2":{"65":2,"70":2,"74":2,"78":2,"81":2}}],["disable",{"2":{"28":2,"70":2,"81":2}}],["dist",{"2":{"7":1,"14":1,"23":1,"39":1,"73":1,"108":6,"115":5,"130":2,"131":2}}],["directories",{"2":{"24":2}}],["directory",{"2":{"23":4,"65":4,"74":2}}],["details",{"2":{"136":6}}],["del",{"2":{"60":2,"132":2}}],["delimiter",{"2":{"43":2}}],["demo",{"2":{"53":2}}],["demonstrates",{"2":{"0":1,"134":1}}],["description",{"2":{"43":2,"105":4}}],["dest",{"0":{"39":1},"2":{"31":1,"60":2,"130":2,"131":2,"132":2}}],["default",{"2":{"27":1,"65":2,"70":6,"74":2,"81":6,"135":4}}],["defineconfig",{"2":{"16":5,"17":2,"126":4,"132":4}}],["dev`",{"2":{"94":2}}],["dev`或`pw",{"2":{"94":2}}],["dev|serve",{"2":{"70":2}}],["devpipflow",{"2":{"69":1}}],["development",{"2":{"43":2,"70":6,"81":2,"85":2}}],["dev",{"0":{"68":1},"1":{"69":1,"70":1},"2":{"17":3,"24":2,"60":4,"61":1,"69":3,"70":4,"85":2,"86":1,"94":5,"132":4}}],["syntax",{"0":{"135":1},"2":{"135":1}}],["sync",{"2":{"81":2}}],["shiki",{"2":{"135":1}}],["shellnpm",{"2":{"99":1}}],["should",{"2":{"81":2}}],["s3",{"2":{"90":1}}],["ssl",{"2":{"70":2,"81":2}}],["skip",{"2":{"65":2}}],["svg",{"2":{"64":2,"66":2}}],["space",{"2":{"64":2}}],["specify",{"2":{"70":8,"74":2,"81":6}}],["specific",{"2":{"23":2,"78":2}}],["special",{"2":{"24":2}}],["scss",{"2":{"44":1,"66":2,"92":1}}],["scroll",{"2":{"28":2}}],["scripts",{"2":{"60":3,"66":2,"94":3,"113":2,"114":6,"115":14,"132":3}}],["script",{"0":{"110":1},"1":{"111":1,"112":1,"113":1,"114":1,"115":1,"116":1,"117":1},"2":{"0":4,"10":1,"41":2,"60":2,"133":1}}],["sass",{"2":{"41":1,"44":3,"92":1}}],["src=",{"2":{"53":4}}],["src",{"2":{"31":4,"40":1,"66":2,"105":8,"108":2,"113":2,"114":6,"115":8,"126":2,"130":8,"131":6}}],["switch",{"2":{"28":2}}],["s",{"2":{"24":2,"81":2}}],["sub",{"2":{"24":2}}],["snippet",{"2":{"21":2}}],["see",{"2":{"81":2}}],["selection",{"2":{"64":2}}],["select",{"2":{"64":2}}],["service",{"2":{"81":2}}],["serverpipflow",{"2":{"80":1}}],["server",{"0":{"19":1,"20":1,"21":1,"22":1,"23":2,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"79":1},"1":{"80":1,"81":1},"2":{"21":2,"23":4,"24":6,"60":2,"70":5,"80":1,"81":8,"133":1}}],["serve",{"2":{"17":3,"23":4,"50":1}}],["series",{"2":{"60":2,"132":4}}],["setheader",{"2":{"24":2}}],["setup",{"2":{"0":2}}],["stag",{"2":{"132":9}}],["stagingpipflow",{"2":{"85":1}}],["staging",{"2":{"85":7}}],["startup",{"2":{"70":4}}],["start",{"2":{"70":2,"81":6}}],["static",{"2":{"10":1,"60":2,"133":1}}],["strict",{"2":{"43":2}}],["string",{"2":{"7":1,"19":1,"23":1,"24":1,"27":2,"31":1,"32":1,"33":2,"34":1,"36":1,"37":1,"38":2,"39":1,"40":1,"41":1,"43":4,"44":4,"49":2,"51":1,"86":1,"132":1}}],["stylus",{"2":{"41":1,"44":1,"92":1}}],["styles",{"2":{"53":2,"66":2}}],["style",{"0":{"118":1},"1":{"119":1,"120":1,"121":1,"122":1,"123":1,"124":1},"2":{"10":1,"41":2,"44":2,"60":2,"133":1}}],["source",{"2":{"9":3,"48":1,"65":2,"108":2,"111":1}}],["sourcemap和文件指纹",{"2":{"92":1}}],["sourcemap",{"0":{"9":1,"48":1},"2":{"48":1}}],["some",{"2":{"0":1,"134":1}}],["site",{"2":{"0":1}}],["additional",{"2":{"135":1}}],["additionaldata",{"2":{"44":6}}],["add",{"2":{"81":2}}],["as",{"2":{"81":2}}],["assets",{"2":{"53":4,"66":2,"99":2}}],["amp",{"2":{"64":2}}],["archive",{"0":{"108":1},"1":{"109":1},"2":{"51":2,"133":1}}],["art",{"2":{"41":1,"101":1,"103":4}}],["alias",{"0":{"33":1,"49":1},"2":{"33":2,"49":2,"53":2,"101":1,"111":1}}],["all",{"2":{"28":2,"64":2,"78":4}}],["at",{"2":{"25":2}}],["an",{"2":{"136":3}}],["any",{"2":{"25":2,"43":4,"44":2}}],["and",{"2":{"0":2,"24":2,"64":2}}],["after",{"2":{"24":2}}],["a",{"2":{"23":2,"43":2,"64":2,"65":2,"74":2,"78":2,"81":6,"136":12}}],["application",{"2":{"24":2}}],["app",{"2":{"21":2,"23":8,"65":2,"85":5,"86":1,"87":1}}],["apis",{"2":{"0":1,"5":1}}],["api",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"25":4,"87":4}}],["access",{"2":{"0":1,"81":2}}],["tpl",{"2":{"103":1}}],["tip",{"2":{"85":1,"130":1,"132":1,"136":6}}],["title=app",{"2":{"85":4,"87":2}}],["title",{"2":{"43":2,"85":5,"86":1,"87":2,"105":8}}],["t",{"2":{"78":2}}],["txt",{"2":{"54":1,"66":2}}],["task",{"0":{"76":1},"1":{"77":1,"78":1},"2":{"60":8,"77":8,"78":8,"94":4,"132":6}}],["tasks",{"2":{"43":2,"44":2,"60":1,"78":6,"99":2,"126":2,"130":4,"131":2,"132":2}}],["target",{"2":{"24":6,"65":4}}],["tsinterface",{"2":{"43":1,"44":1}}],["test",{"2":{"87":2}}],["testing",{"2":{"85":2}}],["template文档",{"2":{"103":1}}],["template是一种快速",{"2":{"103":1}}],["templater",{"2":{"64":2}}],["template",{"2":{"41":1,"101":1,"103":1}}],["terserminifyoptions",{"2":{"12":1}}],["terser",{"0":{"117":1},"2":{"11":1,"12":1,"101":1,"106":1,"111":1,"117":2}}],["typescript",{"2":{"16":1}}],["type",{"0":{"37":1},"2":{"10":1,"16":2,"36":1,"41":3,"44":2,"99":2,"105":2,"126":2,"130":4,"131":2,"132":2}}],["true",{"2":{"8":1,"9":1,"21":2,"22":1,"28":4,"29":1,"43":2,"106":12}}],["toggle",{"2":{"64":2}}],["to",{"2":{"0":1,"21":4,"64":8,"81":8}}],["that",{"2":{"70":2}}],["them",{"2":{"28":2}}],["theme",{"0":{"2":1},"2":{"0":7,"2":1}}],["the",{"2":{"0":3,"5":2,"23":4,"24":8,"64":2,"70":8,"74":4,"81":6,"134":1,"137":2}}],["this",{"2":{"0":1,"134":1,"136":15}}],["built",{"2":{"134":1}}],["buildpipflow",{"2":{"73":1}}],["build",{"0":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"72":1},"1":{"73":1,"74":1},"2":{"8":1,"11":2,"12":2,"13":2,"14":1,"17":5,"39":1,"45":1,"47":1,"48":1,"55":3,"56":1,"60":19,"73":1,"74":4,"85":8,"94":4,"106":1,"132":21}}],["bundle",{"2":{"74":2,"130":4,"131":2}}],["block",{"2":{"136":3}}],["blob",{"2":{"31":1}}],["blue",{"2":{"44":2}}],["background",{"2":{"53":4}}],["babel转译",{"2":{"111":1}}],["babel配置",{"2":{"66":2}}],["babel",{"0":{"116":1},"2":{"41":1,"58":1,"59":4,"64":2,"66":2,"116":3}}],["bash➜",{"2":{"70":1,"74":1,"78":1,"81":1}}],["bashusage",{"2":{"65":1}}],["bashpipflow",{"2":{"15":1,"60":1,"64":2,"65":1,"69":1,"73":1,"77":1,"80":1,"83":1,"85":1,"93":1,"108":1,"132":2}}],["based",{"2":{"43":2}}],["basedir",{"2":{"23":2}}],["base",{"0":{"31":1,"40":1},"2":{"31":7,"40":2,"81":2,"87":2,"114":2,"115":2,"130":2,"131":2}}],["browserslistrc",{"2":{"58":1,"66":2,"116":1}}],["browserslist",{"0":{"58":1},"2":{"58":1,"59":2}}],["browsersync",{"2":{"18":1,"68":1,"79":1,"81":2}}],["browser",{"0":{"27":1},"2":{"27":2,"70":6,"81":8}}],["box",{"2":{"136":3}}],["body",{"2":{"105":4}}],["boolean",{"2":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"21":1,"22":1,"23":1,"26":1,"28":1,"29":1,"45":1,"47":1,"48":1,"50":1,"86":2}}],["both",{"2":{"0":1}}],["before",{"2":{"24":2}}],["be",{"2":{"0":1,"81":2}}],["by",{"2":{"0":1,"65":2,"134":1,"135":1}}],["pxtoview",{"0":{"124":1}}],["pxtorem",{"0":{"123":1}}],["p",{"2":{"105":4}}],["pw",{"2":{"61":1,"69":2,"81":2}}],["powered",{"2":{"65":2,"135":1}}],["polyfill",{"0":{"59":1},"2":{"59":7}}],["postcss集成",{"0":{"121":1},"1":{"122":1,"123":1,"124":1}}],["postcss配置",{"2":{"66":2}}],["postcss",{"2":{"58":1,"66":2}}],["port",{"0":{"20":1},"2":{"20":1,"70":6,"81":6,"94":1}}],["png",{"2":{"53":4,"54":2,"66":2}}],["pipe",{"2":{"92":1,"131":4}}],["pipflow的任务类型主要分为两大类",{"2":{"127":1}}],["pipflow的主要功能包括",{"2":{"92":1}}],["pipflow内置的模板引擎中",{"2":{"105":1}}],["pipflow配置",{"2":{"66":2}}],["pipflow",{"0":{"15":1,"63":1,"68":1,"72":1,"76":1,"79":1,"82":1,"93":1},"1":{"16":1,"17":1,"64":1,"65":1,"69":1,"70":1,"73":1,"74":1,"77":1,"78":1,"80":1,"81":1,"83":1},"2":{"14":1,"15":6,"16":5,"18":1,"43":2,"44":2,"51":1,"53":3,"56":1,"58":1,"59":1,"60":12,"61":6,"65":6,"66":2,"70":5,"74":4,"77":4,"78":4,"81":2,"85":7,"87":4,"92":1,"93":1,"94":12,"99":2,"101":1,"103":1,"105":6,"108":4,"111":1,"126":2,"130":4,"131":2,"132":10,"133":1}}],["piflow",{"2":{"43":2}}],["pug文档",{"2":{"103":1}}],["pug是一种高度可读性的模板引擎",{"2":{"103":1}}],["pug",{"2":{"41":1,"43":2,"101":1,"103":2}}],["public",{"0":{"54":1},"2":{"32":1,"54":4,"60":2,"66":2,"108":2,"132":2}}],["publicdir",{"0":{"32":1},"2":{"32":1,"54":1}}],["per",{"2":{"25":2}}],["partials",{"2":{"105":2}}],["parallel",{"2":{"60":6,"132":7}}],["parent",{"2":{"31":2}}],["pack",{"2":{"51":1,"108":6}}],["package",{"2":{"14":1,"58":1,"60":1,"66":2,"132":1}}],["paths",{"2":{"81":2}}],["path",{"2":{"21":4,"70":4,"74":4,"81":2}}],["pages",{"2":{"114":2,"115":6}}],["page",{"0":{"3":1,"4":1},"2":{"0":11,"3":1,"70":2,"81":2,"134":1}}],["plugin",{"2":{"14":1}}],["plugins",{"0":{"46":1,"130":1},"2":{"14":1,"99":2,"101":1,"105":2,"111":1,"126":4,"129":1,"130":5}}],["primary",{"2":{"44":2}}],["provides",{"2":{"135":1}}],["provided",{"2":{"0":1,"134":1}}],["prod",{"2":{"86":2}}],["produces",{"2":{"74":2}}],["production",{"2":{"10":1,"60":2,"72":1,"74":4,"85":7,"86":2,"87":1,"132":2}}],["proceed",{"2":{"64":2}}],["processors",{"2":{"64":2}}],["process",{"2":{"10":1,"85":1,"86":8,"102":1}}],["projectpipflow",{"2":{"93":1}}],["project",{"2":{"64":2,"65":3,"70":2,"93":1}}],["proxyres",{"2":{"24":4}}],["proxyreq",{"2":{"24":6}}],["proxyoptions",{"2":{"24":1}}],["proxy",{"0":{"24":1},"2":{"24":10}}],["prettier配置",{"2":{"66":2}}],["prettierrc",{"2":{"66":2}}],["press",{"2":{"64":2}}],["preset",{"2":{"58":2,"59":1,"65":2}}],["preview",{"2":{"60":4,"81":2,"94":4}}],["preprocessoroptions",{"2":{"44":4}}],["pre",{"2":{"0":12,"64":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/@localSearchIndexroot.9a311053.js b/assets/chunks/@localSearchIndexroot.9a311053.js new file mode 100644 index 0000000..d1801e8 --- /dev/null +++ b/assets/chunks/@localSearchIndexroot.9a311053.js @@ -0,0 +1 @@ +const t='{"documentCount":142,"nextId":142,"documentIds":{"0":"/api-examples.html#runtime-api-examples","1":"/api-examples.html#results","2":"/api-examples.html#theme-data","3":"/api-examples.html#page-data","4":"/api-examples.html#page-frontmatter","5":"/api-examples.html#more","6":"/config/build-options.html#build-options","7":"/config/build-options.html#build-outdir","8":"/config/build-options.html#build-fileHash","9":"/config/build-options.html#build-sourcemap","10":"/config/build-options.html#build-minify","11":"/config/build-options.html#build-htmlminify","12":"/config/build-options.html#build-jsminify","13":"/config/build-options.html#build-cssminify","14":"/config/build-options.html#build-imageminify","15":"/config/#configuring-pipflow","16":"/config/#配置智能提示","17":"/config/#情景配置","18":"/config/server-options.html#server-options","19":"/config/server-options.html#server-host","20":"/config/server-options.html#server-port","21":"/config/server-options.html#server-https","22":"/config/server-options.html#server-open","23":"/config/server-options.html#server-server","24":"/config/server-options.html#server-proxy","25":"/config/server-options.html#server-middleware","26":"/config/server-options.html#server-cors","27":"/config/server-options.html#server-browser","28":"/config/server-options.html#server-ghostmode","29":"/config/server-options.html#server-notify","30":"/config/shared-options.html#shared-options","31":"/config/shared-options.html#base","32":"/config/shared-options.html#public-dir","33":"/config/shared-options.html#alias","34":"/config/shared-options.html#env-dir","35":"/config/task-options.html#task-options","36":"/config/task-options.html#name","37":"/config/task-options.html#type","38":"/config/task-options.html#input","39":"/config/task-options.html#dest","40":"/config/task-options.html#base","41":"/config/task-options.html#compiler","42":"/config/task-options.html#compiler-options","43":"/config/task-options.html#_1-html模板引擎","44":"/config/task-options.html#_2-css预处理器","45":"/config/task-options.html#minify","46":"/config/task-options.html#plugins","47":"/config/task-options.html#file-hash","48":"/config/task-options.html#sourcemap","49":"/config/task-options.html#alias","50":"/config/task-options.html#watch","51":"/guide/assets.html#静态资源处理","52":"/guide/assets.html#资源文件url","53":"/guide/assets.html#public-目录","54":"/guide/assets.html#文件指纹","55":"/guide/build.html#构建生产版本","56":"/guide/build.html#浏览器兼容性","57":"/guide/build.html#browserslist","58":"/guide/build.html#polyfill","59":"/guide/build.html#自定义构建","60":"/guide/cli.html#cli","61":"/guide/cli.html#cli-create","62":"/guide/cli.html#pipflow-create","63":"/guide/cli.html#使用","64":"/guide/cli.html#选项","65":"/guide/cli.html#项目目录结构","66":"/guide/cli.html#cli-dev","67":"/guide/cli.html#pipflow-dev","68":"/guide/cli.html#使用-1","69":"/guide/cli.html#选项-1","70":"/guide/cli.html#cli-build","71":"/guide/cli.html#pipflow-build","72":"/guide/cli.html#使用-2","73":"/guide/cli.html#选项-2","74":"/guide/cli.html#cli-other","75":"/guide/cli.html#cli-task","76":"/guide/cli.html#使用-3","77":"/guide/cli.html#选项-3","78":"/guide/cli.html#cli-server","79":"/guide/cli.html#使用-4","80":"/guide/cli.html#选项-4","81":"/guide/cli.html#cli-info","82":"/guide/cli.html#使用-5","83":"/guide/env-and-mode.html#模式与环境变量","84":"/guide/env-and-mode.html#模式","85":"/guide/env-and-mode.html#环境变量","86":"/guide/env-and-mode.html#env文件","87":"/guide/#开始","88":"/guide/#总览","89":"/guide/#搭建-pipflow-项目","90":"/guide/#命令行界面","91":"/guide/#配置","92":"/guide/task-assets.html#assets-task","93":"/guide/task-assets.html#process-flow","94":"/guide/task-assets.html#图片压缩","95":"/guide/task-html.html#html-任务","96":"/guide/task-html.html#process-flow","97":"/guide/task-html.html#环境变量处理","98":"/guide/task-html.html#html-templater","99":"/guide/task-html.html#configuration","100":"/guide/task-html.html#example","101":"/guide/task-html.html#content-compress","102":"/guide/task-more.html#more-task","103":"/guide/task-more.html#copy-task","104":"/guide/task-more.html#remove-task","105":"/guide/task-more.html#archive-task","106":"/guide/task-script.html#script-task","107":"/guide/task-script.html#process-flow","108":"/guide/task-script.html#文件入口","109":"/guide/task-script.html#_1-字符串通配符","110":"/guide/task-script.html#_2-数组方式","111":"/guide/task-script.html#_3-对象方式","112":"/guide/task-script.html#babel-转译","113":"/guide/task-script.html#terser","114":"/guide/task-server.html#server-task","115":"/guide/task-server.html#dev-server","116":"/guide/task-server.html#preview-server","117":"/guide/task-server.html#quick-server","118":"/guide/task-style.html#style-任务","119":"/guide/task-style.html#process-flow","120":"/guide/task-style.html#file-entry","121":"/guide/task-style.html#css-preprocessor","122":"/guide/task-style.html#postcss-plugins","123":"/guide/task-style.html#pxtorem","124":"/guide/task-style.html#pxtoview","125":"/guide/task-style.html#with-tailwind-css","126":"/guide/task-user.html#自定义任务和流程","127":"/guide/task-user.html#extend-task","128":"/guide/task-user.html#create-task","129":"/guide/task-user.html#_1-创建固定流程任务","130":"/guide/task-user.html#_2-创建自定义流程任务","131":"/guide/task-user.html#_2-1-plugins-方式","132":"/guide/task-user.html#_2-2-compiler-方式","133":"/guide/task-user.html#compose-task","134":"/guide/task.html#outline","135":"/help.html#常见问题","136":"/help.html#_1-安装依赖时间过长","137":"/help.html#_2-安装依赖失败","138":"/markdown-examples.html#markdown-extension-examples","139":"/markdown-examples.html#syntax-highlighting","140":"/markdown-examples.html#custom-containers","141":"/markdown-examples.html#more"},"fieldIds":{"title":0,"titles":1,"text":2},"fieldLength":{"0":[3,1,52],"1":[1,3,1],"2":[2,4,2],"3":[2,4,2],"4":[2,4,2],"5":[1,3,11],"6":[1,1,1],"7":[2,1,7],"8":[2,1,21],"9":[2,1,18],"10":[2,1,29],"11":[2,1,20],"12":[2,1,18],"13":[2,1,18],"14":[2,1,41],"15":[2,1,31],"16":[1,2,26],"17":[1,2,24],"18":[1,1,10],"19":[2,1,8],"20":[2,1,12],"21":[2,1,28],"22":[2,1,7],"23":[1,1,26],"24":[2,1,49],"25":[2,1,20],"26":[2,1,7],"27":[2,1,13],"28":[2,1,29],"29":[2,1,6],"30":[1,1,1],"31":[1,1,35],"32":[1,1,21],"33":[1,1,19],"34":[1,1,13],"35":[1,1,3],"36":[1,1,11],"37":[1,1,7],"38":[1,1,6],"39":[1,1,12],"40":[1,1,15],"41":[1,1,32],"42":[1,1,9],"43":[2,2,44],"44":[2,2,51],"45":[1,1,17],"46":[1,1,6],"47":[1,1,13],"48":[1,1,15],"49":[1,1,12],"50":[1,1,18],"51":[1,1,1],"52":[1,1,29],"53":[2,1,36],"54":[1,1,16],"55":[1,1,15],"56":[1,1,1],"57":[1,2,29],"58":[1,2,36],"59":[1,1,85],"60":[1,1,23],"61":[1,1,1],"62":[2,2,2],"63":[1,4,48],"64":[1,4,75],"65":[1,2,53],"66":[1,1,1],"67":[2,2,5],"68":[1,4,6],"69":[1,4,62],"70":[1,1,1],"71":[2,2,5],"72":[1,4,15],"73":[1,4,34],"74":[1,1,1],"75":[2,2,2],"76":[1,4,14],"77":[1,4,23],"78":[2,2,15],"79":[1,4,4],"80":[1,4,82],"81":[2,2,2],"82":[1,4,4],"83":[1,1,1],"84":[1,1,78],"85":[1,1,33],"86":[2,2,57],"87":[1,1,1],"88":[1,1,51],"89":[3,1,25],"90":[1,1,37],"91":[1,1,1],"92":[1,1,11],"93":[1,1,12],"94":[1,1,51],"95":[2,1,3],"96":[1,2,37],"97":[1,2,6],"98":[1,2,60],"99":[1,3,1],"100":[1,3,42],"101":[1,2,22],"102":[1,1,7],"103":[2,1,27],"104":[2,1,21],"105":[2,1,19],"106":[2,1,3],"107":[1,2,28],"108":[1,2,7],"109":[2,3,7],"110":[2,3,9],"111":[2,3,16],"112":[2,2,17],"113":[1,2,8],"114":[2,1,11],"115":[1,2,20],"116":[1,2,17],"117":[1,2,26],"118":[2,1,10],"119":[1,2,28],"120":[1,2,25],"121":[2,2,55],"122":[2,2,20],"123":[1,4,27],"124":[1,4,34],"125":[3,4,41],"126":[1,1,1],"127":[1,1,53],"128":[1,1,15],"129":[2,2,36],"130":[2,2,10],"131":[4,4,34],"132":[3,4,30],"133":[1,1,98],"134":[1,1,65],"135":[1,1,1],"136":[2,1,10],"137":[2,1,7],"138":[3,1,14],"139":[2,3,28],"140":[2,3,21],"141":[1,3,11]},"averageFieldLength":[1.450704225352113,1.7605633802816898,21.62676056338028],"storedFields":{"0":{"title":"Runtime API Examples","titles":[]},"1":{"title":"Results","titles":["Runtime API Examples"]},"2":{"title":"Theme Data","titles":["Runtime API Examples","Results"]},"3":{"title":"Page Data","titles":["Runtime API Examples","Results"]},"4":{"title":"Page Frontmatter","titles":["Runtime API Examples","Results"]},"5":{"title":"More","titles":["Runtime API Examples"]},"6":{"title":"构建选项","titles":[]},"7":{"title":"build.outDir","titles":["构建选项"]},"8":{"title":"build.fileHash","titles":["构建选项"]},"9":{"title":"build.sourcemap","titles":["构建选项"]},"10":{"title":"build.minify","titles":["构建选项"]},"11":{"title":"build.htmlMinify","titles":["构建选项"]},"12":{"title":"build.jsMinify","titles":["构建选项"]},"13":{"title":"build.cssMinify","titles":["构建选项"]},"14":{"title":"build.imageMinify","titles":["构建选项"]},"15":{"title":"配置 pipflow","titles":[]},"16":{"title":"配置智能提示","titles":["配置 pipflow"]},"17":{"title":"情景配置","titles":["配置 pipflow"]},"18":{"title":"开发服务器选项","titles":[]},"19":{"title":"server.host","titles":["开发服务器选项"]},"20":{"title":"server.port","titles":["开发服务器选项"]},"21":{"title":"server.https","titles":["开发服务器选项"]},"22":{"title":"server.open","titles":["开发服务器选项"]},"23":{"title":"server.server","titles":["开发服务器选项"]},"24":{"title":"server.proxy","titles":["开发服务器选项"]},"25":{"title":"server.middleware","titles":["开发服务器选项"]},"26":{"title":"server.cors","titles":["开发服务器选项"]},"27":{"title":"server.browser","titles":["开发服务器选项"]},"28":{"title":"server.ghostMode","titles":["开发服务器选项"]},"29":{"title":"server.notify","titles":["开发服务器选项"]},"30":{"title":"共享配置","titles":[]},"31":{"title":"base","titles":["共享配置"]},"32":{"title":"publicDir","titles":["共享配置"]},"33":{"title":"alias","titles":["共享配置"]},"34":{"title":"envDir","titles":["共享配置"]},"35":{"title":"任务配置","titles":[]},"36":{"title":"name","titles":["任务配置"]},"37":{"title":"type","titles":["任务配置"]},"38":{"title":"input","titles":["任务配置"]},"39":{"title":"dest","titles":["任务配置"]},"40":{"title":"base","titles":["任务配置"]},"41":{"title":"compiler","titles":["任务配置"]},"42":{"title":"compilerOptions","titles":["任务配置"]},"43":{"title":"1. HTML模板引擎","titles":["任务配置","compilerOptions"]},"44":{"title":"2. CSS预处理器","titles":["任务配置","compilerOptions"]},"45":{"title":"minify","titles":["任务配置"]},"46":{"title":"plugins","titles":["任务配置"]},"47":{"title":"fileHash","titles":["任务配置"]},"48":{"title":"sourcemap","titles":["任务配置"]},"49":{"title":"alias","titles":["任务配置"]},"50":{"title":"watch","titles":["任务配置"]},"51":{"title":"静态资源处理","titles":[]},"52":{"title":"资源文件URL","titles":["静态资源处理"]},"53":{"title":"public 目录","titles":["静态资源处理"]},"54":{"title":"文件指纹","titles":["静态资源处理"]},"55":{"title":"构建生产版本","titles":[]},"56":{"title":"浏览器兼容性","titles":["构建生产版本"]},"57":{"title":"browserslist","titles":["构建生产版本","浏览器兼容性"]},"58":{"title":"Polyfill","titles":["构建生产版本","浏览器兼容性"]},"59":{"title":"自定义构建","titles":["构建生产版本"]},"60":{"title":"命令行界面","titles":[]},"61":{"title":"创建项目","titles":["命令行界面"]},"62":{"title":"pipflow create","titles":["命令行界面","创建项目"]},"63":{"title":"使用","titles":["命令行界面","创建项目","pipflow create"]},"64":{"title":"选项","titles":["命令行界面","创建项目","pipflow create"]},"65":{"title":"项目目录结构","titles":["命令行界面","创建项目"]},"66":{"title":"开发服务器","titles":["命令行界面"]},"67":{"title":"pipflow dev","titles":["命令行界面","开发服务器"]},"68":{"title":"使用","titles":["命令行界面","开发服务器","pipflow dev"]},"69":{"title":"选项","titles":["命令行界面","开发服务器","pipflow dev"]},"70":{"title":"构建","titles":["命令行界面"]},"71":{"title":"pipflow build","titles":["命令行界面","构建"]},"72":{"title":"使用","titles":["命令行界面","构建","pipflow build"]},"73":{"title":"选项","titles":["命令行界面","构建","pipflow build"]},"74":{"title":"其他","titles":["命令行界面"]},"75":{"title":"pipflow task","titles":["命令行界面","其他"]},"76":{"title":"使用","titles":["命令行界面","其他","pipflow task"]},"77":{"title":"选项","titles":["命令行界面","其他","pipflow task"]},"78":{"title":"pipflow server","titles":["命令行界面","其他"]},"79":{"title":"使用","titles":["命令行界面","其他","pipflow server"]},"80":{"title":"选项","titles":["命令行界面","其他","pipflow server"]},"81":{"title":"pipflow-info","titles":["命令行界面","其他"]},"82":{"title":"使用","titles":["命令行界面","其他","pipflow-info"]},"83":{"title":"模式与环境变量","titles":[]},"84":{"title":"模式","titles":["模式与环境变量"]},"85":{"title":"环境变量","titles":["模式与环境变量"]},"86":{"title":".env文件","titles":["模式与环境变量","环境变量"]},"87":{"title":"开始","titles":[]},"88":{"title":"总览","titles":["开始"]},"89":{"title":"搭建 pipflow 项目","titles":["开始"]},"90":{"title":"命令行界面","titles":["开始"]},"91":{"title":"配置","titles":["开始"]},"92":{"title":"静态资源任务","titles":[]},"93":{"title":"任务流程","titles":["静态资源任务"]},"94":{"title":"图片压缩","titles":["静态资源任务"]},"95":{"title":"HTML 任务","titles":[]},"96":{"title":"任务流程","titles":["HTML 任务"]},"97":{"title":"环境变量处理","titles":["HTML 任务"]},"98":{"title":"模板渲染","titles":["HTML 任务"]},"99":{"title":"渲染配置项","titles":["HTML 任务","模板渲染"]},"100":{"title":"示例","titles":["HTML 任务","模板渲染"]},"101":{"title":"内容压缩","titles":["HTML 任务"]},"102":{"title":"其他任务","titles":[]},"103":{"title":"copy 复制任务","titles":["其他任务"]},"104":{"title":"remove 删除任务","titles":["其他任务"]},"105":{"title":"archive 压缩任务","titles":["其他任务"]},"106":{"title":"script 任务","titles":[]},"107":{"title":"任务流程","titles":["script 任务"]},"108":{"title":"文件入口","titles":["script 任务"]},"109":{"title":"1. 字符串通配符","titles":["script 任务","文件入口"]},"110":{"title":"2. 数组方式","titles":["script 任务","文件入口"]},"111":{"title":"3. 对象方式","titles":["script 任务","文件入口"]},"112":{"title":"babel 转译","titles":["script 任务"]},"113":{"title":"terser","titles":["script 任务"]},"114":{"title":"server 任务","titles":[]},"115":{"title":"本地开发服务","titles":["server 任务"]},"116":{"title":"本地预览服务","titles":["server 任务"]},"117":{"title":"快速预览服务","titles":["server 任务"]},"118":{"title":"style 任务","titles":[]},"119":{"title":"任务流程","titles":["style 任务"]},"120":{"title":"文件入口","titles":["style 任务"]},"121":{"title":"CSS 预处理器","titles":["style 任务"]},"122":{"title":"PostCSS 插件","titles":["style 任务"]},"123":{"title":"pxtorem","titles":["style 任务","PostCSS 插件"]},"124":{"title":"pxtoview","titles":["style 任务","PostCSS 插件"]},"125":{"title":"with Tailwind CSS","titles":["style 任务","PostCSS 插件"]},"126":{"title":"自定义任务和流程","titles":[]},"127":{"title":"扩展任务","titles":["自定义任务和流程"]},"128":{"title":"创建新任务","titles":["自定义任务和流程"]},"129":{"title":"1. 创建固定流程任务","titles":["自定义任务和流程","创建新任务"]},"130":{"title":"2. 创建自定义流程任务","titles":["自定义任务和流程","创建新任务"]},"131":{"title":"2.1 plugins 方式","titles":["自定义任务和流程","创建新任务","2. 创建自定义流程任务"]},"132":{"title":"2.2 compiler 方式","titles":["自定义任务和流程","创建新任务","2. 创建自定义流程任务"]},"133":{"title":"组合任务","titles":["自定义任务和流程"]},"134":{"title":"概要","titles":[]},"135":{"title":"常见问题","titles":[]},"136":{"title":"1. 安装依赖时间过长","titles":["常见问题"]},"137":{"title":"2. 安装依赖失败","titles":["常见问题"]},"138":{"title":"Markdown Extension Examples","titles":[]},"139":{"title":"Syntax Highlighting","titles":["Markdown Extension Examples"]},"140":{"title":"Custom Containers","titles":["Markdown Extension Examples"]},"141":{"title":"More","titles":["Markdown Extension Examples"]}},"dirtCount":0,"index":[["国内可能无法访问",{"2":{"137":1}}],["国内环境",{"2":{"14":1,"94":1}}],["很多包将源码托管在",{"2":{"137":1}}],["多数是因为网络原因",{"2":{"137":1}}],["经常碰到安装依赖失败",{"2":{"137":1}}],["常见问题",{"0":{"135":1},"1":{"136":1,"137":1}}],["及其使用方法",{"2":{"134":1}}],["及其依赖项",{"2":{"125":1}}],["极大提高工作效率",{"2":{"134":1}}],["极大地提升了项目之间的一致性和开发效率",{"2":{"88":1}}],["极大地简化了前端开发流程",{"2":{"88":1}}],["比如",{"2":{"134":1}}],["比如在默认流程之外",{"2":{"127":1}}],["比如在js文件中",{"2":{"85":1}}],["完全自主控制处理流程",{"2":{"134":1}}],["完整命令如下",{"2":{"59":1}}],["格式转换等处理",{"2":{"134":1}}],["专门用于图片资源的压缩",{"2":{"134":1}}],["美化",{"2":{"134":2}}],["主要任务类型包含",{"2":{"134":1}}],["主要包含",{"2":{"118":1}}],["概要",{"0":{"134":1}}],["未知或不为",{"2":{"133":1}}],["未内置",{"2":{"129":1}}],["脚本",{"2":{"133":1}}],["值是一个二维数组",{"2":{"133":1}}],["值为",{"2":{"8":3}}],["入口说明",{"2":{"133":1}}],["从列显的任务中选择一些任务组合为一个新的任务",{"2":{"133":1}}],["先查看项目下的所有任务",{"2":{"133":1}}],["才会执行下一个任务",{"2":{"133":1}}],["组合任务",{"0":{"133":1},"2":{"134":1}}],["没有其他区别",{"2":{"130":1}}],["没有经过",{"2":{"53":1}}],["方法执行的",{"2":{"133":2}}],["方式",{"0":{"131":1,"132":1},"2":{"130":2}}],["方便项目开发和调试",{"2":{"115":1}}],["固定流程任务",{"2":{"128":1}}],["queryselectorall",{"2":{"127":2}}],["quot",{"2":{"10":2,"21":12,"23":12,"24":8,"25":4,"32":2,"52":28,"58":2,"59":36,"64":4,"69":4,"73":4,"80":4,"84":6,"90":36,"124":4,"125":4,"127":4,"133":28}}],["动态插入一段",{"2":{"127":1}}],["输出压缩等流程",{"2":{"127":1}}],["扩展任务",{"0":{"127":1}}],["扩展名",{"2":{"15":1}}],["安装依赖失败",{"0":{"137":1}}],["安装依赖时间过长",{"0":{"136":1}}],["安装",{"2":{"125":1}}],["安全注意事项",{"2":{"86":1}}],["5",{"2":{"124":2}}],["更多配置请参见",{"2":{"123":1,"124":1}}],["更多插件请参见",{"2":{"122":1}}],["更容易调试和版本控制",{"2":{"88":1}}],["已内置浏览器兼容性前缀",{"2":{"122":1}}],["目前",{"2":{"122":1}}],["目录下的所有文件和目录打包压缩成",{"2":{"105":1}}],["目录下的所有文件复制到",{"2":{"103":1}}],["目录下所有的",{"2":{"104":1}}],["目录下",{"2":{"92":1}}],["目录产生一个可用于生产环境的包",{"2":{"72":1}}],["目录默认是",{"2":{"53":1}}],["目录中",{"2":{"53":1}}],["目录",{"0":{"53":1},"2":{"78":1,"117":1}}],["各预处理器使用详见",{"2":{"121":1}}],["三种最常见的",{"2":{"121":1}}],["资源",{"2":{"118":1}}],["资源文件指纹",{"2":{"96":1,"127":1}}],["资源文件夹",{"2":{"65":2}}],["资源文件url",{"0":{"52":1}}],["种服务器已覆盖大部分场景",{"2":{"117":1}}],["种方式",{"2":{"108":1,"120":1}}],["后",{"2":{"117":1}}],["服务器上",{"2":{"137":1}}],["服务器目录默认为构建目录",{"2":{"116":1}}],["服务是基于",{"2":{"114":1}}],["直接执行",{"2":{"115":1}}],["修改支持的目标浏览器",{"2":{"112":1}}],["转译",{"0":{"112":1},"2":{"112":1}}],["转译配置项",{"2":{"42":1}}],["个js文件",{"2":{"111":1}}],["个人推荐",{"2":{"98":1}}],["数组的子项表示一个并行任务",{"2":{"133":1}}],["数组的每一项是一个任务名",{"2":{"133":1}}],["数组列表表示一个串联任务",{"2":{"133":1}}],["数组方式",{"0":{"110":1},"2":{"120":2}}],["数组",{"2":{"108":1,"120":1}}],["数量的最小化",{"2":{"58":1}}],["单位",{"2":{"123":1}}],["单位转换为",{"2":{"123":1,"124":1}}],["单一字符串",{"2":{"108":1,"120":1}}],["单独任务配置项",{"2":{"94":1}}],["单独执行某个任务",{"2":{"75":1}}],["两种方式",{"2":{"107":1,"119":1}}],["zip",{"2":{"105":3,"134":1}}],["同样支持",{"2":{"104":1}}],["同时也支持参数自定义",{"2":{"78":1,"117":1}}],["同时也会生成对应的",{"2":{"8":1}}],["同时提高网站的性能和用户体验",{"2":{"54":1}}],["路径来定义复制源和输出目标",{"2":{"103":1}}],["路径进行解析",{"2":{"15":1}}],["写法",{"2":{"104":1}}],["写法来匹配文件",{"2":{"103":1}}],["写入的环境变量将会被静态替换",{"2":{"97":1}}],["写入文件系统时",{"2":{"31":1}}],["复制文件任务",{"2":{"134":1}}],["复制等处理",{"2":{"134":1}}],["复制任务",{"0":{"103":1}}],["复用",{"2":{"100":2}}],["删除文件任务",{"2":{"134":1}}],["删除任务",{"0":{"104":1}}],["删除",{"2":{"102":1}}],["参见",{"2":{"101":1}}],["参数",{"2":{"59":1}}],["您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目",{"2":{"98":1}}],["标准语法类似",{"2":{"98":1}}],["原始语法兼容",{"2":{"98":1}}],["非常适合前端开发和服务器端渲染",{"2":{"98":1}}],["非常适合快速构建静态页面",{"2":{"98":1}}],["循环和继承等高级功能",{"2":{"98":1}}],["文档",{"2":{"98":5}}],["文件的语法检查",{"2":{"134":2}}],["文件的目录",{"2":{"34":1}}],["文件中配置即可",{"2":{"122":1}}],["文件是基于",{"2":{"113":1}}],["文件来配置",{"2":{"112":1}}],["文件入口配置支持",{"2":{"108":1,"120":1}}],["文件入口",{"0":{"108":1,"120":1},"1":{"109":1,"110":1,"111":1}}],["文件及目录等",{"2":{"102":1}}],["文件监视",{"2":{"88":1}}],["文件应是本地的",{"2":{"86":1}}],["文件覆写",{"2":{"86":1}}],["文件配置来改变它",{"2":{"84":1}}],["文件里配置",{"2":{"57":1}}],["文件指纹",{"0":{"54":1}}],["文件哈希和版本控制",{"2":{"47":1}}],["文件最小化混淆或压缩",{"2":{"45":1}}],["文件转译工具",{"2":{"41":1}}],["文件时",{"2":{"33":1}}],["文件",{"2":{"8":1,"9":2,"48":1,"57":1,"84":1,"100":2,"104":1,"107":1,"119":1,"125":1}}],["具有简洁的语法和强大的功能",{"2":{"98":1}}],["具体配置请参见",{"2":{"125":1}}],["具体配置请点击",{"2":{"94":1}}],["具体配置可以查阅",{"2":{"113":1}}],["具体请看",{"2":{"94":1}}],["具体参数说明请参见",{"2":{"89":1}}],["简洁而且可扩展的模板引擎",{"2":{"98":1}}],["简介",{"2":{"98":5}}],["简单易用和预设功能",{"2":{"88":1}}],["让我们来逐一介绍它们",{"2":{"98":1}}],["🤪",{"2":{"98":1}}],["过的资源文件版本的映射",{"2":{"96":1}}],["内容压缩",{"0":{"101":1},"2":{"96":1}}],["内置一套完整的构建流程和多类型构建任务",{"2":{"134":1}}],["内置了基础处理流程的任务",{"2":{"128":1}}],["内置了众多插件用来转换",{"2":{"122":1}}],["内置了5款流行的模板引擎",{"2":{"98":1}}],["内置5款流行的模板引擎",{"2":{"88":1}}],["内置模板引擎",{"2":{"41":1}}],["内置静态服务器配置",{"2":{"23":1}}],["8及以上版本仅支持",{"2":{"94":1}}],["统一配置项",{"2":{"94":1}}],["且",{"2":{"94":1}}],["且图片压缩是一项耗时的一次性任务",{"2":{"14":1}}],["处理过程完全自主控制",{"2":{"128":1}}],["处理",{"2":{"93":1,"96":1,"107":1,"119":1}}],["处提供",{"2":{"32":1}}],["媒体和字体文件等",{"2":{"92":1}}],["了解更多细节",{"2":{"90":1}}],["了解如何指定浏览器范围",{"2":{"57":1}}],["查看",{"2":{"90":1}}],["查看所有任务",{"2":{"76":2}}],["查看所有任务类型",{"2":{"37":1}}],["获得完整的命令行选项列表",{"2":{"90":1}}],["进行压缩混淆",{"2":{"113":1}}],["进行",{"2":{"112":1}}],["进行引入链接的替换",{"2":{"96":1}}],["进行便捷开发",{"2":{"60":1}}],["进入项目根目录后",{"2":{"90":1}}],["版本才能正常运行",{"2":{"89":1}}],["版本",{"2":{"89":2}}],["需要",{"2":{"89":1}}],["兼容性处理",{"2":{"118":1}}],["兼容性注意",{"2":{"89":1}}],["兼容老版本浏览器",{"2":{"88":1}}],["搭建",{"0":{"89":1}}],["使其成为基于gulp工作流的理想选择",{"2":{"88":1}}],["使用简单",{"2":{"98":1}}],["使用",{"0":{"63":1,"68":1,"72":1,"76":1,"79":1,"82":1},"2":{"20":1,"136":1}}],["温馨说明",{"2":{"88":1}}],["温馨提示",{"2":{"58":1,"60":1}}],["满足各种需求",{"2":{"88":1}}],["本地预览服务通过",{"2":{"116":1}}],["本地预览服务",{"0":{"116":1}}],["本地预览生产构建产物",{"2":{"90":2}}],["本地开发服务通过",{"2":{"115":1}}],["本地开发服务",{"0":{"115":1}}],["本地开发服务器",{"2":{"88":1}}],["本身附带",{"2":{"16":1}}],["图片资源处理任务",{"2":{"134":1}}],["图片优化",{"2":{"88":1}}],["图片压缩和格式转换",{"2":{"134":1}}],["图片压缩",{"0":{"94":1}}],["图片压缩是基于",{"2":{"14":1}}],["图片压缩配置项",{"2":{"14":1}}],["校验",{"2":{"88":1}}],["合并",{"2":{"88":2}}],["打包和发布等处理",{"2":{"134":1}}],["打包压缩任务",{"2":{"134":1}}],["打包等",{"2":{"134":1}}],["打包",{"2":{"88":1}}],["打印当前项目的运行环境信息",{"2":{"81":1}}],["编译",{"2":{"88":1}}],["编译阶段会被统一静态替换",{"2":{"52":1}}],["总览",{"0":{"88":1}}],["源码的变量最终都将出现在客户端包中",{"2":{"86":1}}],["源码文件夹",{"2":{"65":2}}],["检入",{"2":{"86":1}}],["添加到你的",{"2":{"86":1}}],["想要了解解析环境文件规则的细节",{"2":{"86":1}}],["想要了解更多配置细节",{"2":{"18":1}}],["启动",{"2":{"116":1}}],["启动开发服务器",{"2":{"90":2}}],["启动一开始时被加载",{"2":{"86":1}}],["启动时已经存在的环境变量拥有最高优先级",{"2":{"86":1}}],["此外",{"2":{"86":1}}],["此选项配置后会覆盖",{"2":{"11":1,"12":1,"13":1,"14":1}}],["拥有更高的优先级",{"2":{"86":1}}],["键=值",{"2":{"86":1}}],["忽略",{"2":{"86":4}}],["相反",{"2":{"85":1}}],["相对于",{"2":{"15":1}}],["相对于项目根目录",{"2":{"7":1}}],["永远与",{"2":{"85":1}}],["应用程序包的任务",{"2":{"133":1}}],["应用是否运行在开发环境",{"2":{"85":1}}],["应用是否运行在生产环境",{"2":{"85":1}}],["应用运行的模式",{"2":{"85":1}}],["应该始终把",{"2":{"84":1}}],["应该在源码中被引用为",{"2":{"53":1}}],["也不会混淆压缩",{"2":{"84":1}}],["也可以创建全新的任务",{"2":{"134":1}}],["也可以单独配置某个静态任务",{"2":{"94":1}}],["也可以是相对于项目根的路径",{"2":{"34":1}}],["也可以是相对于项目根目录的相对路径",{"2":{"32":1}}],["也可以通过",{"2":{"20":1}}],["也可以在每个任务项内单独配置",{"2":{"10":1}}],["还可以将已有任务和新增任务组合成新的构建任务",{"2":{"134":1}}],["还是生产",{"2":{"84":1}}],["还需要新建一个",{"2":{"84":1}}],["变量",{"2":{"84":1}}],["若想在",{"2":{"84":1}}],["渲染配置项",{"0":{"99":1}}],["渲染html模板引擎",{"2":{"96":1}}],["渲染标题",{"2":{"84":1}}],["渲染时的数据",{"2":{"43":2}}],["生成文件hash",{"2":{"107":1,"119":1}}],["生成文件hash及manifest文件",{"2":{"93":1}}],["生成",{"2":{"107":1,"119":1}}],["生成雪碧图",{"2":{"88":1}}],["生成的",{"2":{"31":1}}],["生产环境",{"2":{"85":2}}],["生产",{"2":{"84":1}}],["而不必等待一个任务完成后再执行下一个任务",{"2":{"133":1}}],["而不是在源代码中直接导入它们",{"2":{"58":1}}],["而",{"2":{"84":2}}],["😆",{"2":{"129":1}}],["😁",{"2":{"129":1}}],["😄",{"2":{"129":1}}],["😃",{"2":{"129":1}}],["😀",{"2":{"129":1}}],["💡",{"2":{"88":1}}],["👉",{"2":{"80":2}}],["🚨",{"2":{"14":1,"94":1}}],["如",{"2":{"85":1,"90":1}}],["如端口",{"2":{"78":1,"117":1}}],["如果当前主机的环境变量",{"2":{"133":1}}],["如果配置了",{"2":{"131":1}}],["如果配置文件需要基于",{"2":{"17":1}}],["如果不满足你的业务需求",{"2":{"127":1}}],["如果不想处理这些静态资源文件",{"2":{"92":1}}],["如果是通过",{"2":{"115":1}}],["如果开启",{"2":{"112":1}}],["如果源文件是目录",{"2":{"103":1}}],["如果在本机全局安装了",{"2":{"90":1}}],["如果在环境中有默认的",{"2":{"84":1}}],["如果在未修改配置文件",{"2":{"59":1}}],["如果文件内部不包含",{"2":{"84":1}}],["如果要构建",{"2":{"59":1}}],["如果你想在",{"2":{"84":1,"127":1}}],["如果你想自定义构建流程",{"2":{"59":1}}],["如果你在执行",{"2":{"84":1}}],["如果你在创建项目时",{"2":{"64":1}}],["如果你在配置文件中开启了文件指纹",{"2":{"54":1}}],["如果你有下列这些资源",{"2":{"53":1}}],["如果你的项目不需要",{"2":{"14":1,"94":1}}],["如果注入的是实际的样式而不仅仅是变量时",{"2":{"44":1,"121":1}}],["如果为",{"2":{"9":2}}],["可用于图片",{"2":{"134":1}}],["可用于",{"2":{"134":3}}],["可将javascript代码嵌入到模板中",{"2":{"98":1}}],["可在任意目录启动服务器",{"2":{"78":1,"117":1}}],["可以将文件打包成",{"2":{"134":1}}],["可以快速创建一个本地开发服务器",{"2":{"134":1}}],["可以快速生成html代码",{"2":{"98":1}}],["可以通过配置实现自动化的资源处理",{"2":{"134":1}}],["可以通过",{"2":{"116":1}}],["可以配置",{"2":{"103":1}}],["可以指定额外的命令行选项",{"2":{"90":1}}],["可以指定当前服务基本目录以及索引文件",{"2":{"23":1}}],["可以直接运行",{"2":{"90":1}}],["可以扩展已有任务",{"2":{"88":1}}],["可以包含敏感变量",{"2":{"86":1}}],["可以帮助优化浏览器缓存和文件更新的管理",{"2":{"54":1}}],["可以用于为每个样式内容注入额外代码",{"2":{"44":1,"121":1}}],["可以是一个绝对路径",{"2":{"34":1}}],["可以关闭此项功能",{"2":{"32":1}}],["可以统一禁用最小化混淆或压缩",{"2":{"10":1}}],["无内置流程",{"2":{"128":1}}],["无需任何配置",{"2":{"115":1}}],["无需浪费时间在重复的工程配置上",{"2":{"88":1}}],["无需配置",{"2":{"78":1,"114":1,"117":1}}],["无损压缩图片",{"2":{"88":1}}],["无论你要部署到哪个环境",{"2":{"84":1}}],["无法将其检测出来",{"2":{"58":1}}],["实现更复杂的构建处理",{"2":{"134":1}}],["实现资源的自动化处理",{"2":{"134":1}}],["实现的",{"2":{"78":1,"114":1}}],["实例是用",{"2":{"31":1}}],["页面",{"2":{"78":1,"117":1}}],["快速预览服务通过",{"2":{"117":1}}],["快速预览服务",{"0":{"117":1}}],["快速预览构建产物",{"2":{"116":1}}],["快速启动一个本地http服务器",{"2":{"78":1}}],["快速搭建一个新项目",{"2":{"60":1}}],["执行如下命令",{"2":{"133":1}}],["执行新任务",{"2":{"133":1}}],["执行",{"2":{"76":2}}],["里的",{"2":{"69":1}}],["除了通过命令行参数",{"2":{"69":1}}],["除去不可抗拒因素外",{"2":{"64":2}}],["基于以上核心任务类型",{"2":{"134":1}}],["基于",{"2":{"67":1,"93":1,"96":1,"107":1,"116":1}}],["公共静态资源服务文件夹",{"2":{"65":2}}],[">",{"2":{"64":1}}],["真不想评价",{"2":{"64":2}}],["吐槽",{"2":{"64":2}}],["环境文件是在",{"2":{"86":1}}],["环境文件加载优先级",{"2":{"86":1}}],["环境目录",{"2":{"86":1}}],["环境变量替换",{"2":{"119":1}}],["环境变量注入",{"2":{"107":1}}],["环境变量在构建时会被静态替换",{"2":{"96":1}}],["环境变量处理",{"0":{"97":1},"2":{"96":1,"107":1}}],["环境变量",{"0":{"85":1},"1":{"86":1}}],["环境",{"2":{"64":1}}],["但会被",{"2":{"86":4}}],["但是本地一定要安装",{"2":{"64":1}}],["但可以通过",{"2":{"53":1}}],["拉取模板",{"2":{"64":1}}],["拉取模板源码一直处于",{"2":{"64":1}}],["建议从",{"2":{"64":1}}],["建议用绝对路径",{"2":{"52":1}}],["状态",{"2":{"64":1}}],["◯",{"2":{"63":10}}],["0",{"2":{"63":2,"127":2}}],["运行简单命令即可快速启动本地开发服务器",{"2":{"114":1}}],["运行",{"2":{"89":1,"90":1}}],["运行在",{"2":{"84":1}}],["运行环境变量",{"2":{"65":2}}],["运行以下命令创建新项目",{"2":{"64":1}}],["运行以下命令来创建一个新项目",{"2":{"63":1}}],["运行下面命令即可构建生产环境应用程序包",{"2":{"59":1}}],["创建本地服务器任务",{"2":{"134":1}}],["创建自定义流程任务有两种方式",{"2":{"130":1}}],["创建自定义流程任务",{"0":{"130":1},"1":{"131":1,"132":1}}],["创建固定流程任务",{"0":{"129":1}}],["创建一个新任务非常简单",{"2":{"128":1}}],["创建一个新项目",{"2":{"62":1}}],["创建新任务",{"0":{"128":1},"1":{"129":1,"130":1,"131":1,"132":1}}],["创建项目",{"0":{"61":1},"1":{"62":1,"63":1,"64":1,"65":1}}],["创建的项目",{"2":{"57":1,"58":1,"115":1,"116":1}}],["下面我将详细介绍每一个任务类型",{"2":{"134":1}}],["下面我们将通过",{"2":{"133":1}}],["下面我们来创建一个使用",{"2":{"129":1}}],["下面我们来深入介绍每个命令的使用",{"2":{"60":1}}],["下面我们以",{"2":{"121":1}}],["下面是",{"2":{"133":1}}],["下面是一些辅助任务",{"2":{"102":1}}],["下面是一些内建变量",{"2":{"85":1}}],["下面是通过脚手架创建的",{"2":{"90":1}}],["下名为",{"2":{"15":1}}],["包含",{"2":{"119":1}}],["包",{"2":{"60":1}}],["确保构建主机的环境变量",{"2":{"59":1,"133":1}}],["即可启动开发服务器",{"2":{"115":1}}],["即可启动当前项目",{"2":{"90":1}}],["即可",{"2":{"59":1}}],["然后按照提示操作即可",{"2":{"89":1}}],["然后运行",{"2":{"59":1,"60":1}}],["然而",{"2":{"58":1,"89":1}}],["代码片段复用的示例",{"2":{"100":1}}],["代码检查",{"2":{"90":2}}],["代指你的组合任务名称",{"2":{"59":1}}],["代理选项不需要这样做",{"2":{"21":1}}],["4",{"2":{"59":2,"63":2,"139":2}}],["4567",{"2":{"24":2}}],["└──",{"2":{"59":6,"65":12}}],["└─┬",{"2":{"59":5}}],["│",{"2":{"59":8,"65":14}}],["├─┬",{"2":{"59":4}}],["├──",{"2":{"59":6,"65":38}}],["我们推荐以这种方式添加",{"2":{"58":1}}],["预处理",{"2":{"118":1}}],["预处理器编译",{"2":{"119":1,"134":1}}],["预处理器特有的选项",{"2":{"44":4}}],["预处理器的选项",{"2":{"44":1}}],["预处理器",{"0":{"121":1},"2":{"41":1,"121":1}}],["预发布环境",{"2":{"133":1}}],["预发布",{"2":{"84":1}}],["预设",{"2":{"58":1}}],["一般无需在配置文件中自行配置",{"2":{"117":1}}],["一份用于指定模式的环境文件",{"2":{"86":1}}],["一个环境文件只包含环境变量的",{"2":{"86":1}}],["一个基于",{"2":{"58":1}}],["一致",{"2":{"11":1,"12":1,"13":1}}],["现在查阅",{"2":{"57":1}}],["特性和需要添加的",{"2":{"57":1}}],["用户自定义任务",{"2":{"134":1}}],["用以运行开发模式的构建",{"2":{"84":1}}],["用来确定需要转译的",{"2":{"57":1}}],["用于并行执行任务",{"2":{"133":1}}],["用于按顺序串联执行任务",{"2":{"133":1}}],["用于快速预览或演示单个",{"2":{"117":1}}],["用于预览生产环境构建后的静态资源",{"2":{"116":1}}],["用于预览或演示单个",{"2":{"78":1}}],["用于复制",{"2":{"102":1}}],["用于指定项目支持的浏览器范围",{"2":{"57":1}}],["用于渲染时所需的数据",{"2":{"43":1}}],["用于加载",{"2":{"34":1}}],["字体等静态资源的优化",{"2":{"134":1}}],["字符串内容替换",{"2":{"127":1}}],["字符串",{"2":{"120":2}}],["字符串通配符",{"0":{"109":1}}],["字符串中任何特殊字符之前的路径段",{"2":{"31":1}}],["字段内添加",{"2":{"133":1}}],["字段配置开发服务器",{"2":{"69":1}}],["字段的",{"2":{"59":1}}],["字段",{"2":{"57":1}}],["你只需要在plugins中配置处理流程所需要的插件即可",{"2":{"131":1}}],["你只需要在配置文件",{"2":{"128":1}}],["你只需在项目的",{"2":{"122":1}}],["你只需在",{"2":{"121":1}}],["你还可以在转译时注入额外代码",{"2":{"121":1}}],["你应该将",{"2":{"86":1}}],["你应该移除它或在运行",{"2":{"84":1}}],["你需要重启服务",{"2":{"86":1}}],["你也可以通过使用不同的模式和对应的",{"2":{"84":1}}],["你也可以使用",{"2":{"69":1}}],["你也可以在终端里使用",{"2":{"60":1}}],["你也可以在",{"2":{"57":1}}],["你会被提示选取需要的特性",{"2":{"63":1}}],["你可以同时执行一系列的任务",{"2":{"133":1}}],["你可以按照顺序依次执行一系列的任务",{"2":{"133":1}}],["你可以简化为如下形式",{"2":{"131":1}}],["你可以这样配置",{"2":{"127":1}}],["你可以这样写",{"2":{"85":1}}],["你可以为所有静态任务统一配置",{"2":{"94":1}}],["你可以使用",{"2":{"84":1}}],["你可以通过这个任务的",{"2":{"127":1}}],["你可以通过传递",{"2":{"84":1}}],["你可以通过运行以下命令进行探索",{"2":{"64":1}}],["你可以通过",{"2":{"60":1,"85":1,"101":1}}],["你可以通过修改项目中的",{"2":{"58":1,"112":1}}],["你可以将它们放在",{"2":{"92":1}}],["你可以将",{"2":{"59":1}}],["你可以创建一个",{"2":{"59":1}}],["你可以在已有的任务基础上进行扩展",{"2":{"134":1}}],["你可以在",{"2":{"52":1,"133":1}}],["你可以显式地通过",{"2":{"15":1}}],["通过下面命令可列显所有任务",{"2":{"133":1}}],["通过parallel方法",{"2":{"133":1}}],["通过pipflow",{"2":{"88":1}}],["通过series方法",{"2":{"133":1}}],["通过",{"2":{"57":1,"125":1}}],["浏览器自动刷新",{"2":{"115":1}}],["浏览器自动刷新等",{"2":{"78":1,"117":1}}],["浏览器支持列表",{"2":{"65":2}}],["浏览器前缀",{"2":{"57":1}}],["浏览器兼容性",{"0":{"56":1},"1":{"57":1,"58":1}}],["浏览器右上角的小弹窗通知",{"2":{"29":1}}],["作为一个任务函数",{"2":{"132":1}}],["作为其入口",{"2":{"55":1}}],["作为静态资源服务的文件夹",{"2":{"32":1}}],["只能安装",{"2":{"94":1}}],["只在指定模式下加载",{"2":{"86":4}}],["只需运行",{"2":{"55":1}}],["只是想得到其",{"2":{"53":1}}],["阶段有效",{"2":{"54":1}}],["阶段是否监视文件变动并重新编译",{"2":{"50":1}}],["之后引入的文件路径会携带文件指纹",{"2":{"54":1}}],["则使用",{"2":{"112":1}}],["则它会被自动排除",{"2":{"58":1}}],["则在",{"2":{"54":1}}],["则可以选择导出这样一个函数",{"2":{"17":1}}],["静态替换",{"2":{"96":1,"107":1,"119":2}}],["静态资源包含常见的图像",{"2":{"92":1}}],["静态资源任务",{"0":{"92":1},"1":{"93":1,"94":1}}],["静态资源处理任务",{"2":{"134":1}}],["静态资源处理",{"0":{"51":1},"1":{"52":1,"53":1,"54":1}}],["静态文件指纹是为了解决缓存问题",{"2":{"54":1}}],["举个例子",{"2":{"53":1}}],["根路径访问到",{"2":{"53":1}}],["它和定义一个gulp任务是一样的",{"2":{"132":1}}],["它同时支持两种模板语法",{"2":{"98":1}}],["它支持javascript语法和自定义扩展",{"2":{"98":1}}],["它支持条件语句",{"2":{"98":1}}],["它被广泛用于javascript开发中的模板渲染",{"2":{"98":1}}],["它具有易学易用的特点",{"2":{"98":1}}],["它允许您动态生成html页面",{"2":{"98":1}}],["它采用缩进和标签语法",{"2":{"98":1}}],["它们曾经都是主流",{"2":{"98":1}}],["它提供了一组开箱即用的gulp任务和功能",{"2":{"88":1}}],["它内置了诸如合并",{"2":{"88":1}}],["它的值将取决于模式",{"2":{"84":1}}],["它会自动加载",{"2":{"84":1}}],["它是基于",{"2":{"78":1}}],["它是",{"2":{"60":1}}],["它通过",{"2":{"58":1}}],["它使用标签和表达式来生成html",{"2":{"98":1}}],["它使用简单的命令就可以完成复杂的前端构建工作",{"2":{"88":1}}],["它使用",{"2":{"55":1}}],["它可以确保用户获得最新的文件版本",{"2":{"54":1}}],["它应位于你的项目根目录",{"2":{"53":1}}],["它为开发过程提供自动化",{"2":{"18":1}}],["那么请在执行的命令前加上",{"2":{"133":1}}],["那么我们来写一个",{"2":{"100":1}}],["那么构建的应用程序包的资源文件将不会进行",{"2":{"84":1}}],["那么你可以将该资源放在指定的",{"2":{"53":1}}],["那么这些样式将会在最终的打包产物中重复出现",{"2":{"44":1,"121":1}}],["必须保持原有文件名",{"2":{"53":1}}],["例如",{"2":{"53":1,"84":3,"86":2,"127":1}}],["不求上进的xx",{"2":{"64":2}}],["不为",{"2":{"59":1}}],["不会被源码引用",{"2":{"53":1}}],["不同于",{"2":{"33":1}}],["引入",{"2":{"52":1,"53":1}}],["开箱即用的前端开发工作流",{"2":{"100":2}}],["开箱即用",{"2":{"88":1}}],["开始",{"0":{"87":1},"1":{"88":1,"89":1,"90":1,"91":1}}],["开发者可以专注于代码编写",{"2":{"88":1}}],["开发者无需从零开始配置就可以立即启动前端项目的开发",{"2":{"88":1}}],["开发环境",{"2":{"85":2}}],["开发",{"2":{"84":1}}],["开发服务器",{"0":{"66":1},"1":{"67":1,"68":1,"69":1},"2":{"84":1}}],["开发服务器启动时",{"2":{"22":1}}],["开发服务器选项",{"0":{"18":1},"1":{"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1}}],["开头",{"2":{"52":1}}],["支持加载npm包",{"2":{"121":2}}],["支持https和浏览器同步测试",{"2":{"88":1}}],["支持less",{"2":{"88":1}}],["支持",{"2":{"50":1,"96":1,"107":1,"119":1,"121":1}}],["支持的",{"2":{"41":1}}],["刷新页面",{"2":{"50":1,"88":1}}],["在gulp中",{"2":{"133":1}}],["在gulp的处理过程中会自动增加文件的输入流和输出流",{"2":{"131":1}}],["在所有情况下都可以使用",{"2":{"85":1}}],["在项目中",{"2":{"85":1}}],["在项目根目录下有一个单独的",{"2":{"57":1}}],["在某些情况下",{"2":{"84":1}}],["在你的应用中",{"2":{"84":1}}],["在当前项目下启动一个开发服务器",{"2":{"67":1}}],["在页面内通过别名+路径引入文件",{"2":{"52":1}}],["在页面中引入资源文件",{"2":{"52":1}}],["在",{"2":{"50":1,"58":1,"84":2,"133":1}}],["在处理html",{"2":{"33":1}}],["会将整个目录复制过去",{"2":{"103":1}}],["会从你的",{"2":{"86":1}}],["会合并全局",{"2":{"49":1}}],["会自动解析",{"2":{"15":1}}],["别名替换",{"2":{"49":1,"96":1,"107":1,"119":1}}],["自动检测文件变动并重新编译",{"2":{"88":1}}],["自动添加浏览器前缀",{"2":{"88":1}}],["自动在浏览器中打开应用程序",{"2":{"22":1}}],["自身也是一塌糊涂",{"2":{"64":2}}],["自定义一些全新任务",{"2":{"134":1}}],["自定义流程任务",{"2":{"128":1}}],["自定义插件处理",{"2":{"119":1}}],["自定义处理流程",{"2":{"93":1,"96":1,"107":1}}],["自定义任务和流程",{"0":{"126":1},"1":{"127":1,"128":1,"129":1,"130":1,"131":1,"132":1,"133":1}}],["自定义任务",{"2":{"88":1}}],["自定义任务处理流程",{"2":{"46":1}}],["自定义",{"2":{"59":1}}],["自定义构建",{"0":{"59":1}}],["压缩包",{"2":{"134":1}}],["压缩混淆",{"2":{"107":2,"119":1}}],["压缩任务",{"0":{"105":1}}],["压缩默认配置",{"2":{"101":1}}],["压缩图片作为一个可选项",{"2":{"94":1}}],["压缩图片",{"2":{"93":2}}],["压缩图片或者手动一次性压缩",{"2":{"14":1,"94":1}}],["压缩",{"2":{"88":1,"102":1,"134":1}}],["压缩等处理",{"2":{"134":1}}],["压缩等",{"2":{"88":1,"134":1}}],["压缩等功能",{"2":{"88":1,"118":1}}],["压缩配置项",{"2":{"45":1}}],["对于已有的任务",{"2":{"127":1}}],["对应的字符串",{"2":{"96":1,"107":1,"119":2}}],["对应的混淆",{"2":{"45":1}}],["对",{"2":{"86":1}}],["对象方式",{"0":{"111":1},"2":{"120":2}}],["对象来获取环境变量",{"2":{"85":1}}],["对象上设置",{"2":{"31":1,"40":1}}],["选项标志来覆盖命令使用的默认模式",{"2":{"84":1}}],["选项时",{"2":{"59":1}}],["选项",{"0":{"64":1,"69":1,"73":1,"77":1,"80":1},"2":{"44":2,"53":1,"121":4}}],["```",{"2":{"139":1}}],["``````js",{"2":{"139":1}}],["```js",{"2":{"139":1}}],["`pipflow",{"2":{"90":2}}],["`dist",{"2":{"73":2}}],["`",{"2":{"44":4,"73":2,"121":4}}],["2",{"0":{"44":1,"110":1,"130":1,"131":1,"132":2,"137":1},"1":{"131":1,"132":1},"2":{"59":2,"120":2}}],["其内部是通过",{"2":{"133":2}}],["其",{"2":{"133":1}}],["其他配置项",{"2":{"133":2}}],["其他任务",{"0":{"102":1},"1":{"103":1,"104":1,"105":1},"2":{"121":2,"133":2}}],["其他",{"0":{"74":1},"1":{"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1}}],["其他编译选项",{"2":{"43":2}}],["其构建过程任务如下",{"2":{"59":1}}],["其值为传递给",{"2":{"43":1,"44":1}}],["12",{"2":{"123":2}}],["16",{"2":{"123":2}}],["16+",{"2":{"89":1}}],["13+",{"2":{"89":1}}],["14",{"2":{"89":1}}],["1└─┬",{"2":{"59":1}}],["1",{"0":{"43":1,"109":1,"129":1,"131":1,"136":1},"2":{"59":1,"120":2,"124":2}}],["继承",{"2":{"39":1,"40":1,"45":1,"47":1,"48":1,"49":1}}],["+",{"2":{"36":1}}],["每个预处理器支持的选项可以在它们各自的文档中找到",{"2":{"44":1}}],["每个任务的单独配置项",{"2":{"35":1}}],["每一款都有自己独特的特点和用法",{"2":{"98":1}}],["每一个html模板引擎选项都包含",{"2":{"43":1}}],["每一项将会被静态替换",{"2":{"33":1}}],["任务中",{"2":{"133":1}}],["任务入口",{"2":{"133":2}}],["任务名",{"2":{"133":4}}],["任务名称",{"2":{"36":1}}],["任务用于处理",{"2":{"118":1}}],["任务用于文件和目录的压缩和打包",{"2":{"105":1}}],["任务用于删除文件和目录",{"2":{"104":1}}],["任务用于复制文件和目录",{"2":{"103":1}}],["任务流程",{"0":{"93":1,"96":1,"107":1,"119":1}}],["任务",{"0":{"95":1,"106":1,"114":1,"118":1},"1":{"96":1,"97":1,"98":1,"99":1,"100":1,"101":1,"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1,"115":1,"116":1,"117":1,"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1},"2":{"76":2,"117":1}}],["任务索引",{"2":{"36":1}}],["任务类型为",{"2":{"92":1,"95":1,"106":1,"114":1,"118":1}}],["任务类型",{"2":{"36":1,"37":1,"133":2}}],["任务配置",{"0":{"35":1},"1":{"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"43":1,"44":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1}}],["任何设备上的点击",{"2":{"28":1}}],["关于图片压缩配置",{"2":{"94":1}}],["关于",{"2":{"54":1}}],["关于环境文件的更多信息",{"2":{"34":1}}],["关闭文件哈希",{"2":{"8":1}}],["功能强大",{"2":{"98":1}}],["功能",{"2":{"33":1}}],["等视口单位",{"2":{"124":1}}],["等",{"2":{"33":1,"119":1}}],["友情提醒",{"2":{"33":1}}],["全局安装",{"2":{"117":1}}],["全局",{"2":{"40":1,"49":1}}],["全局字符串别名",{"2":{"33":1}}],["全局配置",{"2":{"10":1}}],["设置",{"2":{"136":1}}],["设置后会覆盖全局配置",{"2":{"35":1}}],["设置为",{"2":{"10":1,"84":1}}],["设定为",{"2":{"32":1}}],["并创建",{"2":{"125":1}}],["并标准化了构建流程",{"2":{"88":1}}],["并不会被",{"2":{"86":1}}],["并附带开箱即用的热重载功能",{"2":{"67":1}}],["并生成能够静态部署的应用程序包",{"2":{"55":1}}],["并且打包时会被完整复制到目标目录的根目录下",{"2":{"53":1}}],["并且始终按原样提供或复制而无需进行转换",{"2":{"32":1}}],["并在构建期间复制到",{"2":{"32":1}}],["并将",{"2":{"14":1,"94":1}}],["库",{"2":{"31":1}}],["以上",{"2":{"117":1}}],["以避免它们被",{"2":{"86":1}}],["以文件名或url参数形式",{"2":{"54":1}}],["以",{"2":{"52":1}}],["以保留目录结构",{"2":{"31":1}}],["以便更好的控制缓存",{"2":{"8":1}}],["当一个任务完成后",{"2":{"133":1}}],["当任务类型为",{"2":{"130":1}}],["当任务类型不为",{"2":{"129":1}}],["当你的包管理器发出警告时",{"2":{"89":1}}],["当运行",{"2":{"84":1}}],["当配置完成之后",{"2":{"59":1}}],["当需要将应用部署到生产环境时",{"2":{"55":1}}],["当转译器compiler",{"2":{"43":1,"44":1}}],["当",{"2":{"41":3}}],["当使用",{"2":{"31":1}}],["当以命令行方式运行",{"2":{"15":1}}],["集作为它们的",{"2":{"31":1}}],["由于图片压缩是一项耗时的一次性任务",{"2":{"94":1}}],["由于任何暴露给",{"2":{"86":1}}],["由于",{"2":{"84":1}}],["由于安装",{"2":{"14":1}}],["由",{"2":{"31":1,"60":1}}],["该命令会在",{"2":{"72":1}}],["该目录中的资源在开发时能直接通过",{"2":{"53":1}}],["该目录中的文件在开发期间在",{"2":{"32":1}}],["该值可以是文件系统的绝对路径",{"2":{"32":1}}],["该路径段不能是可变的",{"2":{"31":1}}],["该配置项仅对任务类型",{"2":{"10":1}}],["所有的任务会并行执行",{"2":{"133":1}}],["所有的环境变量都从对应的环境文件中载入",{"2":{"84":1}}],["所有预处理器都支持",{"2":{"121":1}}],["所有预处理器选项支持",{"2":{"44":1}}],["所有情况下都会加载",{"2":{"86":4}}],["所有匹配",{"2":{"31":1}}],["所以当你运行",{"2":{"84":1}}],["所以你可以通过",{"2":{"16":1}}],["所以",{"2":{"14":1,"94":1}}],["因此环境变量应该不包含任何敏感信息",{"2":{"86":1}}],["因此环境文件发生变化",{"2":{"86":1}}],["因此",{"2":{"31":1}}],["因为如果这里列出的",{"2":{"58":1}}],["因为它会从目标网址中推断出来",{"2":{"21":1}}],["因为",{"2":{"16":1}}],["是用于定义任务执行顺序的两个方法",{"2":{"133":1}}],["是不是非常简单",{"2":{"129":1}}],["是一种简单而灵活的模板引擎",{"2":{"98":1}}],["是一个基于gulp的前端开发工作流",{"2":{"88":1}}],["是一个全局安装的",{"2":{"60":1}}],["是开发",{"2":{"84":1}}],["是否监听文件变化",{"2":{"78":1,"117":1}}],["是否生成",{"2":{"48":1}}],["是",{"2":{"31":2}}],["有些模板需要依赖更高的",{"2":{"89":1}}],["有关更深入的信息",{"2":{"31":1}}],["有时称为",{"2":{"31":1}}],["有效",{"2":{"10":1,"41":1}}],["属性中配置对应的预处理器即可",{"2":{"121":1}}],["属性兼容性前缀",{"2":{"119":1}}],["属性构造的",{"2":{"31":1}}],["属性",{"2":{"31":1,"40":1,"43":1,"131":1}}],["显式地在创建的",{"2":{"31":1,"40":1}}],["共享配置",{"0":{"30":1},"1":{"31":1,"32":1,"33":1,"34":1}}],["you",{"2":{"28":2}}],["yourlocal",{"2":{"24":2}}],["your",{"2":{"24":2,"63":2}}],["滚动和表单输入都将镜像到所有其他设备",{"2":{"28":1}}],["示例",{"0":{"100":1},"2":{"27":1,"43":1,"44":1}}],["要打开的浏览器",{"2":{"27":1}}],["中增加一条任务项即可",{"2":{"128":1}}],["中包含",{"2":{"96":1}}],["中添加的自定义",{"2":{"93":1,"96":1,"107":1}}],["中",{"2":{"86":1}}],["中可能存在的环境变量",{"2":{"84":1}}],["中间件函数或插件",{"2":{"25":1}}],["中的下列文件加载额外的环境变量",{"2":{"86":1}}],["中的资源永远应该使用根绝对路径",{"2":{"53":1}}],["中的",{"2":{"14":1,"59":1,"94":1}}],["xxx",{"2":{"97":1}}],["x",{"2":{"24":2}}],["key",{"2":{"21":4,"33":1,"43":4,"44":2,"49":1}}],["warning",{"2":{"140":9}}],["watch",{"0":{"50":1},"2":{"80":6}}],["w",{"2":{"80":2}}],["which",{"2":{"80":2}}],["when",{"2":{"64":2}}],["web",{"2":{"80":2}}],["webpack",{"2":{"33":1,"112":1}}],["world",{"2":{"63":1}}],["worldpipflow",{"2":{"63":1}}],["workflow",{"2":{"43":2,"88":1}}],["works",{"2":{"0":1}}],["with",{"0":{"125":1},"2":{"21":2,"23":2,"69":2,"139":1}}],["注入额外代码",{"2":{"121":2}}],["注入等功能",{"2":{"115":1}}],["注入的额外代码",{"2":{"44":4}}],["注",{"2":{"59":1}}],["注意",{"2":{"21":1}}],["注解也可以获取类型提示",{"2":{"16":1}}],["来获取可用于部署的应用程序",{"2":{"84":1}}],["来配置",{"2":{"53":1}}],["来设置",{"2":{"20":1}}],["来决定选项",{"2":{"17":1}}],["375",{"2":{"124":2}}],["3",{"0":{"111":1},"2":{"59":2,"108":1,"111":1,"117":1,"120":3}}],["3000",{"2":{"20":1,"80":2}}],["39",{"2":{"0":4,"16":8,"17":8,"24":14,"27":4,"43":16,"44":12,"85":4,"100":24,"103":12,"104":8,"105":12,"109":4,"110":12,"111":28,"120":44,"121":20,"123":8,"124":16,"125":12,"127":28,"129":20,"131":48,"132":32,"133":40,"139":8}}],["9527",{"2":{"20":1,"69":2}}],["npx",{"2":{"125":2}}],["npmmirror",{"2":{"136":2}}],["npm",{"2":{"59":1,"60":1,"90":1,"115":1,"116":1,"125":1}}],["n",{"2":{"64":2}}],["new",{"2":{"64":2}}],["needed",{"2":{"63":2}}],["next",{"2":{"24":4,"25":2}}],["n$",{"2":{"44":2,"121":2}}],["nunjucks文档",{"2":{"98":1}}],["nunjucks是一款功能强大的模板引擎",{"2":{"98":1}}],["nunjucks",{"2":{"41":1,"96":1,"98":2}}],["number",{"2":{"20":1}}],["name",{"0":{"36":1},"2":{"59":7,"64":6,"76":2,"77":2,"107":2,"119":2,"131":2,"133":2}}],["not",{"2":{"69":2,"80":2}}],["notify",{"0":{"29":1},"2":{"69":4,"80":4}}],["normalize",{"2":{"65":2}}],["no",{"2":{"64":2,"69":4,"80":4,"90":1}}],["node",{"2":{"10":1,"59":4,"84":9,"85":2,"86":2,"89":3,"121":2,"123":2,"133":5}}],["地址",{"2":{"19":1}}],["指定任务输出路径",{"2":{"39":1}}],["指定任务入口文件",{"2":{"38":1}}],["指定开发服务器端口",{"2":{"20":1}}],["指定服务器应该监听哪个",{"2":{"19":1}}],["指定输出路径",{"2":{"7":1}}],["请在命令开头加上",{"2":{"59":1}}],["请注意升级你的",{"2":{"89":1}}],["请注意",{"2":{"44":1,"53":1,"121":1}}],["请参见",{"2":{"34":1,"37":1,"39":1,"40":1,"41":2,"42":2,"45":1,"46":1,"47":1,"48":1,"49":1,"53":1}}],["请参阅",{"2":{"31":1}}],["请参考",{"2":{"18":1,"86":1}}],["请删除项目的",{"2":{"14":1,"94":1}}],["高效的同步与调试功能",{"2":{"18":1}}],["工具",{"2":{"18":1}}],["工具函数",{"2":{"16":1}}],["独有配置",{"2":{"17":4}}],["模板引擎",{"2":{"129":1}}],["模板引擎渲染",{"2":{"127":1}}],["模板引擎的选项",{"2":{"43":1}}],["模板配置",{"2":{"100":1}}],["模板文件",{"2":{"100":1}}],["模板",{"2":{"98":1}}],["模板渲染",{"0":{"98":1},"1":{"99":1,"100":1},"2":{"96":1,"134":1}}],["模块化",{"2":{"94":1}}],["模块化规范",{"2":{"15":1}}],["模式下被设置为",{"2":{"84":2}}],["模式下构建应用",{"2":{"84":1}}],["模式与环境变量",{"0":{"83":1},"1":{"84":1,"85":1,"86":1}}],["模式",{"0":{"84":1},"2":{"17":1,"84":2}}],["情景配置",{"0":{"17":1}}],["这两种方式除了书写方式不同之外",{"2":{"130":1}}],["这会删除",{"2":{"104":1}}],["这会将",{"2":{"103":1,"105":1}}],["这些模板引擎在过去都很流行",{"2":{"98":1}}],["这意味着当执行",{"2":{"84":1}}],["这也意味着如果其中一个依赖需要特殊的",{"2":{"58":1}}],["这确保了最终包里",{"2":{"58":1}}],["这样它会根据源代码中出现的语言特性自动检测需要的",{"2":{"58":1}}],["这样不用",{"2":{"16":1}}],["这个值会被",{"2":{"57":1}}],["这里列出一些常用的插件和用法示例",{"2":{"122":1}}],["这里的",{"2":{"33":1}}],["这里",{"2":{"11":1,"12":1,"13":1,"14":1,"18":1,"34":1,"37":1,"39":1,"40":1,"41":2,"42":2,"45":1,"46":1,"47":1,"48":1,"49":1,"53":1,"54":1,"57":1,"59":1,"89":1,"94":2,"101":2,"113":1,"122":1,"123":1,"124":1,"125":1}}],["这里是全局配置",{"2":{"10":1}}],["另外你可以使用",{"2":{"16":1}}],["命令启动",{"2":{"115":1,"117":1}}],["命令创建新项目",{"2":{"89":1}}],["命令的时候明确地设置",{"2":{"84":1}}],["命令的缩写",{"2":{"60":1}}],["命令时",{"2":{"84":2}}],["命令则运行在",{"2":{"84":1}}],["命令有一些可选项",{"2":{"64":1}}],["命令行界面",{"0":{"60":1,"90":1},"1":{"61":1,"62":1,"63":1,"64":1,"65":1,"66":1,"67":1,"68":1,"69":1,"70":1,"71":1,"72":1,"73":1,"74":1,"75":1,"76":1,"77":1,"78":1,"79":1,"80":1,"81":1,"82":1},"2":{"90":1}}],["命令行选项指定一个配置文件",{"2":{"15":1}}],["命令必须使用",{"2":{"59":1}}],["命令更改为",{"2":{"59":1}}],["命令来完成的",{"2":{"59":1}}],["命令",{"2":{"55":1,"60":2,"84":1}}],["命令或者不同的",{"2":{"17":1}}],["命令构建后生成的静态资源在它们的文件名中包含了",{"2":{"8":1}}],["项目中集成",{"2":{"125":1}}],["项目中默认的",{"2":{"90":1}}],["项目",{"0":{"89":1}}],["项目目录结构",{"0":{"65":1}}],["项目配置文件仅支持",{"2":{"15":1}}],["项目根目录",{"2":{"15":1}}],["最后生成",{"2":{"111":1}}],["最基础的配置文件是这样的",{"2":{"15":1}}],["最小化混淆配置项",{"2":{"12":1}}],["最小化压缩配置项",{"2":{"11":1,"13":1}}],["和压缩优化",{"2":{"122":1}}],["和对象",{"2":{"108":1,"120":1}}],["和为更好的缓存而做的自动的",{"2":{"72":1}}],["和",{"2":{"15":1,"16":1,"57":1,"58":1,"102":1,"103":1,"107":1,"119":1,"133":1}}],["仅在",{"2":{"54":1}}],["仅对任务类型为",{"2":{"41":1}}],["仅仅是字符串的别名替换",{"2":{"33":1}}],["仅支持",{"2":{"15":1}}],["仅生成版本映射文件manifest",{"2":{"8":1}}],["的语法检查和压缩",{"2":{"134":1}}],["的值转换后的结果",{"2":{"133":1}}],["的任务类型主要分为两大类",{"2":{"128":1}}],["的转译选项",{"2":{"112":1}}],["的使用相对复杂一些",{"2":{"100":1}}],["的内容压缩",{"2":{"96":1}}],["的版本",{"2":{"94":1}}],["的压缩",{"2":{"72":1}}],["的首尾字母组合而成",{"2":{"60":1}}],["的其他平台环境的部署包",{"2":{"59":1}}],["的目标中不需要",{"2":{"58":1}}],["的根目录",{"2":{"32":1}}],["的路径都保证共享",{"2":{"31":1}}],["的",{"2":{"31":1,"59":1,"114":1,"128":1,"129":1,"133":1}}],["的本地开发服务器是基于",{"2":{"18":1}}],["的配合来实现智能提示",{"2":{"16":1}}],["的配置文件",{"2":{"15":1}}],["的安装提取到项目的依赖中",{"2":{"14":1}}],["配置中",{"2":{"131":1}}],["配置自定义构建流程",{"2":{"59":1}}],["配置来自行调整",{"2":{"58":1}}],["配置来决定项目需要的",{"2":{"58":1}}],["配置请参见",{"2":{"54":1}}],["配置文件中设置路径别名",{"2":{"52":1}}],["配置说明",{"2":{"44":3,"121":3}}],["配置项来扩展当前任务",{"2":{"127":1}}],["配置项来指定压缩选项",{"2":{"101":1}}],["配置项请点",{"2":{"113":1}}],["配置项",{"2":{"42":2}}],["配置项的值设置为",{"2":{"14":1,"94":1}}],["配置智能提示",{"0":{"16":1}}],["配置选项",{"2":{"15":2}}],["配置",{"0":{"15":1,"91":1},"1":{"16":1,"17":1},"2":{"39":1,"40":1,"45":1,"47":1,"48":1,"49":2,"125":2}}],["依赖",{"2":{"14":1,"94":1}}],["依赖经常失败",{"2":{"14":1}}],["提供了文件监听",{"2":{"115":1}}],["提供了终端里的",{"2":{"60":1}}],["提醒",{"2":{"14":1,"59":1,"64":1,"94":1}}],["提示",{"2":{"10":1,"15":1,"117":1}}],["git忽略",{"2":{"65":2}}],["gitignore",{"2":{"65":2,"86":1}}],["gitee",{"2":{"64":3}}],["github",{"2":{"64":2}}],["git",{"2":{"64":9,"86":5}}],["glob",{"2":{"31":7,"103":1,"104":1}}],["go",{"2":{"28":2}}],["google",{"2":{"27":2}}],["ghostmode",{"0":{"28":1},"2":{"28":4}}],["gulp",{"2":{"14":4,"43":2,"94":4,"98":5,"127":2,"129":2,"131":12,"132":10}}],["gt",{"2":{"0":16,"17":2,"52":8,"53":1,"55":1,"59":15,"63":8,"64":4,"69":6,"73":4,"76":2,"80":6,"100":36,"127":4}}],["jquery",{"2":{"127":4}}],["jquery外链源码",{"2":{"127":1}}],["javascript处理任务",{"2":{"134":1}}],["javascript语法转换",{"2":{"88":1}}],["javascript",{"2":{"12":1,"33":1,"57":1,"98":1,"112":1,"113":1,"134":1}}],["jsexport",{"2":{"139":1}}],["jsseries",{"2":{"133":1}}],["jsconst",{"2":{"124":1}}],["jsdist",{"2":{"111":1}}],["jsdoc",{"2":{"16":2}}],["jsif",{"2":{"85":1}}],["jsimport",{"2":{"16":1}}],["js文件夹",{"2":{"65":2}}],["jsmodule",{"2":{"17":1,"125":1}}],["jsminify",{"0":{"12":1}}],["jspipflow",{"2":{"15":1}}],["js",{"2":{"15":6,"16":1,"21":1,"23":1,"24":1,"25":1,"27":1,"28":1,"31":3,"43":3,"44":3,"52":1,"58":2,"59":1,"65":10,"69":1,"72":1,"89":1,"93":1,"96":1,"100":3,"101":1,"103":3,"104":3,"105":3,"107":1,"109":3,"110":7,"111":14,"112":1,"120":1,"121":3,"122":1,"123":3,"125":6,"127":5,"128":1,"129":3,"131":6,"132":3,"133":5,"134":1}}],["js最小化混淆是基于",{"2":{"12":1}}],["json",{"2":{"8":3,"14":1,"15":1,"52":3,"57":1,"59":2,"65":2,"90":1,"94":1,"96":1,"133":2}}],["详细配置请参见",{"2":{"11":1,"12":1,"13":1,"14":1,"59":1,"101":1}}],["插件文档",{"2":{"98":5}}],["插件在压缩图片过程中会自动过滤非图片文件",{"2":{"94":1}}],["插件安装依赖经常失败",{"2":{"94":1}}],["插件",{"0":{"122":1},"1":{"123":1,"124":1,"125":1},"2":{"11":1,"12":1,"13":1,"14":1,"101":1,"122":1}}],["与",{"2":{"11":1,"12":1,"13":1}}],["highlighted",{"2":{"139":4}}],["highlighting",{"0":{"139":1},"2":{"139":2}}],["hits",{"2":{"24":2}}],["h1",{"2":{"100":4}}],["hbs",{"2":{"100":8}}],["hb",{"2":{"98":1}}],["hmr",{"2":{"69":2}}],["h",{"2":{"64":2,"69":2,"73":2,"77":2,"80":2}}],["head",{"2":{"100":4}}],["headers",{"2":{"80":2}}],["header",{"2":{"24":2,"100":10}}],["help",{"2":{"64":5,"69":6,"73":6,"77":6,"80":6,"90":1}}],["helppipflow",{"2":{"64":1}}],["hello",{"2":{"63":2,"100":2,"129":2}}],["here",{"2":{"28":2}}],["handlebars文档",{"2":{"98":1}}],["handlebars是一种语法简洁的模板引擎",{"2":{"98":1}}],["handlebars",{"2":{"41":1,"96":1,"98":1,"100":4}}],["handle",{"2":{"25":4}}],["hash",{"2":{"8":1,"53":1,"72":1,"84":1,"96":1,"107":2,"119":2}}],["http",{"2":{"24":4,"80":2}}],["https",{"0":{"21":1},"2":{"21":9,"69":2,"80":4,"127":2}}],["html处理任务",{"2":{"134":1}}],["html的压缩是基于",{"2":{"101":1}}],["html内容中的以",{"2":{"97":1}}],["html模板渲染",{"2":{"88":1}}],["html模板引擎时",{"2":{"43":1}}],["html模板引擎",{"0":{"43":1},"2":{"41":1,"42":1}}],["html文件夹",{"2":{"65":2}}],["html压缩是基于",{"2":{"11":1}}],["htmlminifyoptions",{"2":{"11":1}}],["htmlminify",{"0":{"11":1},"2":{"101":1}}],["html",{"0":{"95":1},"1":{"96":1,"97":1,"98":1,"99":1,"100":1,"101":1},"2":{"10":1,"11":2,"23":2,"41":2,"43":1,"50":1,"52":3,"55":1,"59":2,"63":2,"65":2,"72":1,"78":1,"95":1,"96":1,"100":13,"101":1,"117":1,"125":2,"127":6,"129":5,"133":2,"134":3}}],["hostname",{"2":{"69":2,"80":2}}],["host",{"0":{"19":1},"2":{"69":2,"80":4}}],["为了方便发布",{"2":{"133":1}}],["为了编码方便",{"2":{"121":1}}],["为例进行简单配置",{"2":{"121":1}}],["为生产环境构建产物",{"2":{"90":2}}],["为开发服务器配置",{"2":{"26":1}}],["为开发服务器配置自定义代理规则",{"2":{"24":1}}],["为本地主机开发启用",{"2":{"21":1}}],["为",{"2":{"10":1,"41":6,"43":1,"44":1,"59":1,"133":1}}],["⚠️",{"2":{"10":1}}],["embedded",{"2":{"98":1}}],["esmodule",{"2":{"94":1}}],["eslint配置",{"2":{"65":2}}],["eslintrc",{"2":{"65":2}}],["eslint忽略",{"2":{"65":2}}],["eslintignore",{"2":{"65":2}}],["every",{"2":{"80":2}}],["element",{"2":{"69":2,"80":2}}],["else",{"2":{"17":2,"85":2}}],["ejs文档",{"2":{"98":1}}],["ejs",{"2":{"41":1,"96":1,"98":4}}],["each",{"2":{"28":2}}],["enter",{"2":{"63":2}}],["end",{"2":{"43":2,"132":2}}],["enable",{"2":{"21":4,"28":2,"69":4,"80":2}}],["env文件",{"0":{"86":1}}],["env=developmentapp",{"2":{"86":1}}],["env=development",{"2":{"84":3,"86":1}}],["env=production",{"2":{"59":3,"133":3}}],["envdir",{"0":{"34":1}}],["env",{"2":{"10":2,"34":1,"57":2,"58":1,"59":4,"65":2,"69":2,"73":2,"84":16,"85":10,"86":13,"97":1,"119":1,"122":1,"133":5}}],["export",{"2":{"139":3}}],["exports",{"2":{"15":2,"16":4,"17":2,"43":2,"44":2,"100":2,"103":2,"104":2,"105":2,"121":2,"123":2,"124":2,"125":4,"127":2,"129":2,"131":4,"132":2,"133":2}}],["extensions",{"2":{"138":1,"141":1}}],["extension",{"0":{"138":1},"1":{"139":1,"140":1,"141":1}}],["extend",{"2":{"125":2}}],["exclude",{"2":{"123":2}}],["example",{"2":{"76":2}}],["examples",{"0":{"0":1,"138":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1,"139":1,"140":1,"141":1}}],["exists",{"2":{"64":4}}],["附加在输出文件中",{"2":{"9":1}}],["unpkg",{"2":{"127":2}}],["unitprecision",{"2":{"124":2}}],["underscore",{"2":{"98":1}}],["utils",{"2":{"110":2,"111":2,"120":2}}],["url=http",{"2":{"86":2}}],["url",{"2":{"53":1}}],["uri",{"2":{"9":1}}],["using",{"2":{"24":2}}],["use",{"2":{"64":2,"80":4}}],["usebuiltins",{"2":{"58":1}}],["user",{"2":{"50":1,"129":1,"130":1,"131":4,"132":2,"134":1}}],["userconfig",{"2":{"16":2}}],["used",{"2":{"0":1,"80":2}}],["usedata",{"2":{"0":5}}],["usage",{"2":{"0":1,"58":1,"69":2,"73":2,"77":2,"80":2}}],["将已有任务组合成一个新任务",{"2":{"134":1}}],["将处理流程写在",{"2":{"131":1}}],["将css中的",{"2":{"124":1}}],["将构建后通过生成的",{"2":{"96":1}}],["将会比一般的环境文件",{"2":{"86":1}}],["将会创建一个独立的",{"2":{"9":1}}],["将决定您的应用运行的模式",{"2":{"84":1}}],["将从输出路径中删除",{"2":{"31":1}}],["将",{"2":{"14":1,"32":1,"94":1,"123":1,"132":1}}],["将作为一个",{"2":{"9":1}}],["将生成文件名哈希和版本映射文件manifest",{"2":{"8":1}}],["构建用于预发布环境的应用程序包",{"2":{"133":1}}],["构建",{"0":{"70":1},"1":{"71":1,"72":1,"73":1},"2":{"112":1}}],["构建生产环境应用程序包默认是通过",{"2":{"59":1}}],["构建生产版本",{"0":{"55":1},"1":{"56":1,"57":1,"58":1,"59":1},"2":{"71":1}}],["构建后的内容",{"2":{"52":2}}],["构建后是否生成",{"2":{"9":1}}],["构建选项",{"0":{"6":1},"1":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1}}],["或者调整",{"2":{"112":1}}],["或者",{"2":{"68":2,"131":1}}],["或者超时失败",{"2":{"64":1}}],["或者你压根不想引入该资源",{"2":{"53":1}}],["或",{"2":{"8":1,"17":1,"45":1,"90":1,"92":1}}],["时为自定义流程任务",{"2":{"130":1}}],["时为固定流程任务",{"2":{"129":1}}],["时将环境变量设定为",{"2":{"84":1}}],["时运行不同的模式来渲染不同的标题",{"2":{"84":1}}],["时",{"2":{"8":3,"15":1,"41":3,"84":1}}],["|",{"2":{"8":2,"9":1,"11":1,"12":1,"13":1,"14":1,"23":2,"24":1,"25":1,"27":1,"32":1,"38":2,"45":1,"47":2,"94":2}}],["默认运行生产模式构建",{"2":{"84":1}}],["默认带有",{"2":{"72":1}}],["默认入口页面",{"2":{"65":2}}],["默认情况下",{"2":{"55":1,"58":2,"84":1}}],["默认为",{"2":{"36":1,"71":1}}],["默认",{"2":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"31":1,"32":1,"34":1,"36":1,"39":1,"40":1,"45":1,"47":1,"48":1,"50":1}}],["类型的任务默认处理流程包括",{"2":{"127":1}}],["类型的组合任务来创建一个构建",{"2":{"133":1}}],["类型的组合任务",{"2":{"59":1}}],["类型任务构建过程中增加其他处理流程",{"2":{"127":1}}],["类型任务的",{"2":{"121":1}}],["类型任务",{"2":{"50":1,"129":1}}],["类型",{"2":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"16":1,"19":1,"20":1,"21":1,"22":1,"23":1,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"31":1,"32":1,"33":1,"34":1,"36":1,"37":1,"38":1,"39":1,"40":1,"41":1,"42":1,"45":1,"46":1,"47":1,"48":1,"49":1,"50":1}}],["l",{"2":{"77":2}}],["lodash",{"2":{"98":1}}],["local",{"2":{"69":2,"80":4,"86":6}}],["localhost",{"2":{"19":1,"24":4}}],["logo",{"2":{"65":4}}],["loading",{"2":{"64":1}}],["like",{"2":{"139":1}}],["line",{"2":{"80":2,"139":1}}],["lint",{"2":{"76":4,"90":4}}],["linter",{"2":{"63":2}}],["listpipflow",{"2":{"76":1,"133":1}}],["list",{"2":{"5":1,"76":1,"77":6,"133":1,"141":1}}],["less",{"2":{"41":1,"44":1,"121":2}}],["lt",{"2":{"0":16,"52":8,"53":1,"55":1,"59":15,"63":8,"64":4,"69":6,"73":4,"76":2,"80":6,"94":1,"100":34,"127":4}}],["on",{"2":{"69":4,"80":6,"132":2}}],["one",{"2":{"28":2}}],["overwrite",{"2":{"64":2}}],["or",{"2":{"28":2}}],["object",{"2":{"23":1,"38":1,"42":1}}],["open",{"0":{"22":1},"2":{"69":8,"80":8,"90":1}}],["options",{"2":{"14":2,"64":4,"69":4,"73":4,"77":4,"80":4,"94":2}}],["output",{"2":{"139":1,"140":1}}],["outdir",{"0":{"7":1},"2":{"32":1,"39":1}}],["out",{"2":{"5":1,"141":1}}],["off",{"2":{"28":2}}],["of",{"2":{"0":2,"5":1,"138":1,"141":1}}],["run",{"2":{"59":1,"77":2,"115":1,"116":1}}],["runtime",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"5":1}}],["robots",{"2":{"53":1,"65":2}}],["rootvalue",{"2":{"123":2}}],["root",{"2":{"34":1,"53":1,"55":1,"80":2}}],["route",{"2":{"25":4}}],["registry=https",{"2":{"136":1}}],["registry",{"2":{"136":2}}],["rem",{"2":{"123":1}}],["remove",{"0":{"104":1},"2":{"104":3,"134":1}}],["removeemptyattributes",{"2":{"101":2}}],["removecomments",{"2":{"101":2}}],["remote",{"2":{"64":2}}],["release",{"2":{"105":3}}],["ready",{"2":{"73":2}}],["readme",{"2":{"65":2}}],["repo=gitee",{"2":{"64":1}}],["repository",{"2":{"64":2}}],["repo",{"2":{"64":2}}],["require",{"2":{"123":2,"124":4,"125":4,"127":4,"129":4,"131":6,"132":4,"133":2}}],["requests",{"2":{"25":2}}],["request",{"2":{"24":2,"80":2}}],["req",{"2":{"24":4,"25":2}}],["res",{"2":{"24":4,"25":2}}],["response",{"2":{"24":4}}],["results",{"0":{"1":1},"1":{"2":1,"3":1,"4":1},"2":{"0":2}}],["returned",{"2":{"24":2}}],["return",{"2":{"17":4,"127":2,"132":2,"139":4}}],["=7",{"2":{"94":1}}],["===",{"2":{"10":1,"17":4,"85":2}}],["=",{"2":{"0":2,"15":2,"16":4,"17":4,"43":2,"44":2,"100":2,"103":2,"104":2,"105":2,"121":2,"123":2,"124":4,"125":4,"127":6,"129":6,"131":10,"132":6,"133":4}}],["favicon",{"2":{"65":2}}],["false",{"2":{"8":2,"9":1,"10":1,"14":1,"21":1,"24":1,"25":1,"26":1,"28":5,"32":2,"45":1,"47":1,"48":1,"50":1,"69":2,"80":2,"94":1,"124":2}}],["fetching",{"2":{"64":2}}],["features",{"2":{"63":2,"139":1}}],["feature",{"2":{"28":2}}],["f",{"2":{"64":2,"80":2}}],["foobar",{"2":{"24":2}}],["force",{"2":{"64":2}}],["formatter",{"2":{"63":1}}],["formatterpipflow",{"2":{"63":1}}],["forms",{"2":{"28":2}}],["for",{"2":{"0":1,"5":1,"21":2,"63":2,"64":2,"69":6,"73":2,"77":2,"80":6,"141":1}}],["function",{"2":{"24":6,"25":4,"46":1,"127":2}}],["full",{"2":{"5":1,"141":1}}],["file",{"2":{"69":2,"72":1,"73":2,"80":4}}],["filename",{"2":{"23":2,"80":2}}],["filehash",{"0":{"8":1,"47":1},"2":{"47":1,"54":1}}],["files",{"2":{"0":1,"23":4,"80":4}}],["front",{"2":{"43":2}}],["frontmatter",{"0":{"4":1},"2":{"0":6,"4":1}}],["from",{"2":{"0":2,"16":2,"23":4,"24":2}}],["vh",{"2":{"124":1}}],["vw",{"2":{"124":3}}],["verbose",{"2":{"94":2}}],["v0",{"2":{"63":2}}],["variables",{"2":{"44":2,"121":2}}],["viewportunit",{"2":{"124":2}}],["viewportwidth",{"2":{"124":2}}],["viewport",{"2":{"124":4}}],["views",{"2":{"65":2,"100":4}}],["vite",{"2":{"33":1}}],["vitepress",{"2":{"0":3,"138":1,"139":1}}],["vinyl",{"2":{"31":2,"40":1}}],["vue",{"2":{"0":1}}],["msg",{"2":{"139":4}}],["mpmrc",{"2":{"136":1}}],["mediaquery",{"2":{"124":2}}],["merge",{"2":{"64":4}}],["mjs",{"2":{"109":2}}],["mustache",{"2":{"98":1,"129":7}}],["minpixelvalue",{"2":{"123":2,"124":2}}],["minifier",{"2":{"11":1,"96":1,"101":1}}],["minifycss",{"2":{"101":2}}],["minifyjs",{"2":{"101":2}}],["minifyoptions",{"2":{"45":1}}],["minify",{"0":{"10":1,"45":1},"2":{"10":1,"11":2,"12":2,"13":2,"14":1,"45":1,"94":1}}],["middleware",{"0":{"25":1},"2":{"24":2,"25":4}}],["my",{"2":{"15":2,"64":1,"89":2}}],["modify",{"2":{"24":6}}],["mode=stagingpipflow",{"2":{"133":1}}],["mode=staging",{"2":{"59":1,"133":3}}],["mode=stagingcross",{"2":{"59":1}}],["mode=production",{"2":{"59":4}}],["mode=productionpipflow",{"2":{"59":1}}],["mode",{"2":{"17":2,"21":4,"59":1,"69":6,"71":1,"73":6,"84":3,"85":1,"86":4}}],["modules",{"2":{"121":2,"123":2}}],["module",{"2":{"15":2,"16":4,"17":1,"43":2,"44":2,"100":2,"103":2,"104":2,"105":2,"121":2,"123":2,"124":2,"125":3,"127":2,"129":2,"131":4,"132":2,"133":2}}],["more",{"0":{"5":1,"141":1},"2":{"80":2}}],["markdown",{"0":{"138":1},"1":{"139":1,"140":1,"141":1},"2":{"138":1,"141":1}}],["map",{"2":{"9":3,"48":1,"104":3,"107":1,"119":1}}],["manifest",{"2":{"8":1,"96":1}}],["main",{"2":{"0":1}}],["md",{"2":{"0":2,"65":2,"140":1}}],["is",{"2":{"140":15}}],["ignore",{"2":{"124":2}}],["io",{"2":{"80":2}}],["ico",{"2":{"65":2}}],["icon",{"2":{"53":2}}],["i",{"2":{"63":2,"123":2}}],["ip",{"2":{"19":1}}],["if",{"2":{"17":2,"64":4,"85":1}}],["ide",{"2":{"16":1}}],["img",{"2":{"52":8}}],["images",{"2":{"52":4}}],["imagemin",{"2":{"14":4,"93":1,"94":4}}],["imageminifyoptions",{"2":{"94":1}}],["imageminifyplugin",{"2":{"94":2}}],["imageminify",{"0":{"14":1},"2":{"14":1,"94":2}}],["image",{"2":{"10":1,"50":1,"63":2,"92":1,"133":2,"134":1}}],["import",{"2":{"0":2,"16":3,"44":2,"121":2,"125":2}}],["insertadjacenthtml",{"2":{"127":2}}],["install",{"2":{"125":2}}],["init",{"2":{"125":1}}],["initnpm",{"2":{"125":1}}],["initialization",{"2":{"64":2}}],["includepaths",{"2":{"121":2}}],["includes",{"2":{"100":4}}],["infopipflow",{"2":{"82":1}}],["info",{"0":{"81":1},"1":{"82":1},"2":{"82":1,"140":6}}],["invert",{"2":{"63":2}}],["interface",{"2":{"43":1,"44":1}}],["input入口和其他类型任务有些不同",{"2":{"133":1}}],["input",{"0":{"38":1},"2":{"100":2,"103":3,"104":3,"105":2,"109":2,"110":2,"111":2,"120":6,"121":2,"127":2,"129":2,"131":3,"133":4,"139":1,"140":1}}],["individually",{"2":{"28":2}}],["index",{"2":{"23":6,"36":1,"55":1,"65":6,"69":4,"80":4,"100":2,"111":10,"120":8}}],["inline",{"2":{"9":2}}],["in",{"2":{"0":1,"28":2,"69":4,"73":2,"80":2,"138":1}}],["it",{"2":{"0":1,"24":4,"64":4}}],["cnpm",{"2":{"136":1}}],["clone",{"2":{"64":5}}],["clicks",{"2":{"28":2}}],["cli",{"2":{"20":1,"58":1,"60":2,"63":2,"64":2,"90":1,"117":1}}],["c",{"2":{"64":2}}],["cross",{"2":{"59":2,"133":3}}],["create",{"0":{"62":1},"1":{"63":1,"64":1},"2":{"57":1,"60":1,"63":2,"64":8,"89":3,"115":1}}],["crt",{"2":{"21":2}}],["changes",{"2":{"80":2}}],["chrome",{"2":{"27":2}}],["check",{"2":{"5":1,"63":2,"141":1}}],["cert",{"2":{"21":2}}],["certificates",{"2":{"21":2}}],["custom",{"0":{"140":1},"2":{"21":6}}],["current",{"2":{"0":1,"69":2}}],["cwd",{"2":{"15":1}}],["collapsebooleanattributes",{"2":{"101":2}}],["collapsewhitespace",{"2":{"101":2}}],["color",{"2":{"44":2,"121":2}}],["copy任务支持",{"2":{"103":1}}],["copy",{"0":{"103":1},"2":{"50":1,"59":2,"103":3,"133":2,"134":1}}],["com",{"2":{"86":2,"127":2,"136":2}}],["compileoptions",{"2":{"100":2}}],["compileroptions",{"0":{"42":1},"1":{"43":1,"44":1},"2":{"43":4,"44":4,"121":2}}],["compiler",{"0":{"41":1,"132":1},"2":{"41":3,"43":2,"44":2,"100":2,"121":3,"130":1,"132":3}}],["compress",{"2":{"63":2}}],["compose",{"2":{"59":8,"133":4,"134":1}}],["comm",{"2":{"44":2,"111":4,"120":4,"121":2}}],["command➜",{"2":{"69":1,"73":1,"77":1,"80":1}}],["commandusage",{"2":{"64":1}}],["command",{"2":{"17":6,"64":1,"69":1,"73":1,"77":1,"80":3}}],["commonjs",{"2":{"15":1}}],["cors",{"0":{"26":1},"2":{"26":1,"69":4,"80":2}}],["concat",{"2":{"131":12,"132":6}}],["containers",{"0":{"140":1}}],["content",{"2":{"125":2}}],["control",{"2":{"80":2}}],["configuration",{"2":{"69":2,"73":2}}],["config",{"2":{"15":8,"43":2,"44":2,"52":3,"58":2,"59":1,"65":6,"69":3,"73":2,"93":1,"96":1,"100":2,"103":2,"104":2,"105":2,"107":1,"112":1,"121":2,"122":1,"123":2,"125":5,"127":2,"128":1,"129":2,"131":4,"132":2,"133":2}}],["const",{"2":{"0":2,"124":1,"127":4,"129":4,"131":6,"132":4,"133":2}}],["css处理任务",{"2":{"134":1}}],["css预处理",{"2":{"88":1}}],["css预处理器时",{"2":{"44":1}}],["css预处理器",{"0":{"44":1},"2":{"41":1,"42":1}}],["css文件夹",{"2":{"65":2}}],["cssnano",{"2":{"13":1,"119":1,"122":1}}],["cssnanooptions",{"2":{"13":1}}],["css压缩是基于",{"2":{"13":1}}],["css",{"0":{"121":1,"125":1},"2":{"13":1,"33":1,"41":1,"44":1,"52":2,"57":1,"63":2,"65":2,"72":1,"115":1,"118":2,"119":1,"120":16,"121":1,"122":1,"125":1,"131":10,"132":4,"133":2,"134":2}}],["cssminify",{"0":{"13":1}}],["can",{"2":{"0":1,"28":2}}],["dangerous",{"2":{"140":3}}],["danger",{"2":{"140":3}}],["data",{"0":{"2":1,"3":1},"2":{"0":5,"9":1,"43":5,"100":2,"139":4}}],["d",{"2":{"125":2}}],["done",{"2":{"132":4}}],["dom",{"2":{"127":6}}],["dotenv",{"2":{"86":1}}],["docs",{"2":{"80":2}}],["documentation",{"2":{"5":1,"141":1}}],["display",{"2":{"64":2,"69":2,"73":2,"77":2,"80":2}}],["disable",{"2":{"28":2,"69":2,"80":2}}],["dist",{"2":{"7":1,"14":1,"23":1,"39":1,"72":1,"103":3,"104":3,"105":3,"111":5,"127":2,"131":2,"132":2}}],["directories",{"2":{"24":2}}],["directory",{"2":{"23":4,"64":4,"73":2}}],["details",{"2":{"140":6}}],["del",{"2":{"59":2,"133":2}}],["delimiter",{"2":{"43":2}}],["demo",{"2":{"52":2}}],["demonstrates",{"2":{"0":1,"138":1}}],["description",{"2":{"43":2,"100":4}}],["dest",{"0":{"39":1},"2":{"31":1,"59":2,"103":3,"105":2,"131":2,"132":2,"133":2}}],["default",{"2":{"27":1,"64":2,"69":6,"73":2,"80":6,"139":4}}],["defineconfig",{"2":{"16":5,"17":2,"127":4,"129":4,"133":4}}],["dev`",{"2":{"90":2}}],["dev`或`pw",{"2":{"90":2}}],["dev|serve",{"2":{"69":2}}],["devpipflow",{"2":{"68":1,"115":1}}],["development",{"2":{"43":2,"69":6,"80":2,"84":2}}],["dev",{"0":{"67":1},"1":{"68":1,"69":1},"2":{"17":3,"24":2,"59":4,"60":1,"68":3,"69":4,"84":2,"85":1,"90":5,"115":3,"133":4}}],["shiki",{"2":{"139":1}}],["should",{"2":{"80":2}}],["syntax",{"0":{"139":1},"2":{"139":1}}],["sync",{"2":{"80":2,"114":1}}],["s3",{"2":{"137":1}}],["silent",{"2":{"94":2}}],["site",{"2":{"0":1}}],["ssl",{"2":{"69":2,"80":2}}],["skip",{"2":{"64":2}}],["svg",{"2":{"63":2,"65":2}}],["space",{"2":{"63":2}}],["specify",{"2":{"69":8,"73":2,"80":6}}],["specific",{"2":{"23":2,"77":2}}],["special",{"2":{"24":2}}],["scss",{"2":{"44":1,"65":2,"88":1,"120":2,"121":5}}],["scroll",{"2":{"28":2}}],["scripts",{"2":{"59":3,"65":2,"90":3,"109":2,"110":6,"111":14,"133":3}}],["script",{"0":{"106":1},"1":{"107":1,"108":1,"109":1,"110":1,"111":1,"112":1,"113":1},"2":{"0":4,"10":1,"41":2,"50":1,"59":2,"106":1,"127":4,"134":1}}],["sass",{"2":{"41":1,"44":3,"88":1,"121":6}}],["src=",{"2":{"52":4,"127":2}}],["src",{"2":{"31":4,"40":1,"65":2,"100":8,"103":3,"109":2,"110":6,"111":8,"120":16,"121":2,"125":2,"127":2,"129":2,"131":8,"132":6}}],["switch",{"2":{"28":2}}],["s",{"2":{"24":2,"80":2}}],["sub",{"2":{"24":2}}],["snippet",{"2":{"21":2}}],["see",{"2":{"80":2}}],["selectorblacklist",{"2":{"124":2}}],["selection",{"2":{"63":2}}],["select",{"2":{"63":2}}],["service",{"2":{"80":2}}],["serverpipflow",{"2":{"79":1,"117":1}}],["server",{"0":{"19":1,"20":1,"21":1,"22":1,"23":2,"24":1,"25":1,"26":1,"27":1,"28":1,"29":1,"78":1,"114":1},"1":{"79":1,"80":1,"115":1,"116":1,"117":1},"2":{"21":2,"23":4,"24":6,"59":2,"69":5,"79":1,"80":8,"114":2,"116":3,"117":3,"134":1}}],["serve",{"2":{"17":3,"23":4,"50":1}}],["series",{"2":{"59":2,"133":4}}],["setheader",{"2":{"24":2}}],["setup",{"2":{"0":2}}],["stag",{"2":{"133":9}}],["stagingpipflow",{"2":{"84":1}}],["staging",{"2":{"84":7}}],["startup",{"2":{"69":4}}],["start",{"2":{"69":2,"80":6}}],["static",{"2":{"10":1,"50":1,"59":2,"92":1,"134":1}}],["strict",{"2":{"43":2}}],["string",{"2":{"7":1,"19":1,"23":1,"24":1,"27":2,"31":1,"32":1,"33":2,"34":1,"36":1,"37":1,"38":2,"39":1,"40":1,"41":1,"43":4,"44":4,"49":2,"85":1,"133":1}}],["stylus",{"2":{"41":1,"44":1,"88":1,"121":2}}],["styles",{"2":{"52":2,"65":2,"120":16,"121":2}}],["style",{"0":{"118":1},"1":{"119":1,"120":1,"121":1,"122":1,"123":1,"124":1,"125":1},"2":{"10":1,"41":2,"44":2,"50":1,"59":2,"118":2,"121":3,"134":1}}],["source",{"2":{"9":3,"48":1,"64":2,"107":1,"119":1}}],["sourcemap和文件指纹",{"2":{"88":1}}],["sourcemap",{"0":{"9":1,"48":1},"2":{"48":1}}],["some",{"2":{"0":1,"138":1}}],["autoprefixer",{"2":{"119":1,"125":4}}],["archive",{"0":{"105":1},"2":{"105":3,"134":1}}],["art",{"2":{"41":1,"96":1,"98":4}}],["additional",{"2":{"139":1}}],["additionaldata",{"2":{"44":6,"121":4}}],["add",{"2":{"80":2}}],["as",{"2":{"80":2}}],["assets",{"2":{"52":4,"65":2,"103":6}}],["amp",{"2":{"63":2}}],["alias",{"0":{"33":1,"49":1},"2":{"33":2,"49":2,"52":2,"96":1,"107":1,"119":1}}],["all",{"2":{"28":2,"63":2,"77":4}}],["at",{"2":{"25":2}}],["an",{"2":{"140":3}}],["any",{"2":{"25":2,"43":4,"44":2}}],["and",{"2":{"0":2,"24":2,"63":2}}],["after",{"2":{"24":2}}],["a",{"2":{"23":2,"43":2,"63":2,"64":2,"73":2,"77":2,"80":6,"140":12}}],["application",{"2":{"24":2}}],["app",{"2":{"21":2,"23":8,"64":2,"84":5,"85":1,"86":1}}],["apis",{"2":{"0":1,"5":1}}],["api",{"0":{"0":1},"1":{"1":1,"2":1,"3":1,"4":1,"5":1},"2":{"0":1,"25":4,"86":4}}],["access",{"2":{"0":1,"80":2}}],["tpl",{"2":{"98":1}}],["tsimageminifyoptions",{"2":{"94":1}}],["tsinterface",{"2":{"43":1,"44":1}}],["tip",{"2":{"84":1,"131":1,"133":1,"140":6}}],["title=app",{"2":{"84":4,"86":2}}],["title",{"2":{"43":2,"84":5,"85":1,"86":2,"100":8,"129":2}}],["t",{"2":{"77":2}}],["txt",{"2":{"53":1,"65":2}}],["tailwindcss",{"2":{"125":9}}],["tailwind",{"0":{"125":1},"2":{"125":3}}],["task",{"0":{"75":1},"1":{"76":1,"77":1},"2":{"59":8,"76":8,"77":8,"90":4,"116":3,"133":6}}],["tasks",{"2":{"43":2,"44":2,"59":1,"77":6,"103":2,"104":2,"105":2,"121":2,"127":2,"128":1,"129":2,"131":4,"132":2,"133":2}}],["target",{"2":{"24":6,"64":4}}],["test",{"2":{"86":2}}],["testing",{"2":{"84":2}}],["template文档",{"2":{"98":1}}],["template是一种快速",{"2":{"98":1}}],["templater",{"2":{"63":2}}],["template",{"2":{"41":1,"96":1,"98":1}}],["terserminifyoptions",{"2":{"12":1}}],["terser",{"0":{"113":1},"2":{"11":1,"12":1,"96":1,"101":1,"107":1,"113":2}}],["typescript",{"2":{"16":1}}],["type",{"0":{"37":1},"2":{"10":1,"16":2,"36":1,"41":3,"44":2,"100":2,"103":2,"104":2,"105":2,"121":2,"125":2,"127":2,"129":2,"131":4,"132":2,"133":2}}],["true",{"2":{"8":1,"9":1,"21":2,"22":1,"28":4,"29":1,"43":2,"101":12}}],["toggle",{"2":{"63":2}}],["to",{"2":{"0":1,"21":4,"63":8,"80":8,"124":4}}],["that",{"2":{"69":2}}],["them",{"2":{"28":2}}],["theme",{"0":{"2":1},"2":{"0":7,"2":1,"125":2}}],["the",{"2":{"0":3,"5":2,"23":4,"24":8,"63":2,"69":8,"73":4,"80":6,"138":1,"141":2}}],["this",{"2":{"0":1,"127":2,"138":1,"140":15}}],["built",{"2":{"138":1}}],["buildpipflow",{"2":{"72":1}}],["build",{"0":{"7":1,"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"71":1},"1":{"72":1,"73":1},"2":{"8":1,"11":2,"12":2,"13":2,"14":1,"17":5,"39":1,"45":1,"47":1,"48":1,"54":3,"55":1,"59":19,"72":1,"73":4,"84":8,"90":4,"94":1,"101":1,"131":2,"133":21}}],["bundle",{"2":{"73":2,"131":4,"132":2}}],["block",{"2":{"140":3}}],["blob",{"2":{"31":1}}],["blue",{"2":{"44":2,"121":2}}],["background",{"2":{"52":4}}],["babel转译",{"2":{"107":1}}],["babel配置",{"2":{"65":2}}],["babel",{"0":{"112":1},"2":{"41":1,"57":1,"58":4,"63":2,"65":2,"112":3}}],["bashregistry=https",{"2":{"136":1}}],["bashnpm",{"2":{"125":1}}],["bash➜",{"2":{"69":1,"73":1,"77":1,"80":1}}],["bashusage",{"2":{"64":1}}],["bashpipflow",{"2":{"15":1,"59":1,"63":2,"64":1,"68":1,"72":1,"76":1,"79":1,"82":1,"84":1,"89":1,"115":1,"116":1,"117":1,"133":2}}],["based",{"2":{"43":2}}],["basedir",{"2":{"23":2}}],["base",{"0":{"31":1,"40":1},"2":{"31":7,"40":2,"80":2,"86":2,"110":2,"111":2,"120":2,"131":2,"132":2}}],["browserslistrc",{"2":{"57":1,"65":2,"112":1}}],["browserslist",{"0":{"57":1},"2":{"57":1,"58":2}}],["browsersync",{"2":{"18":1,"67":1,"78":1,"80":2}}],["browser",{"0":{"27":1},"2":{"27":2,"69":6,"80":8,"114":1}}],["box",{"2":{"140":3}}],["body",{"2":{"100":4,"127":2}}],["boolean",{"2":{"8":1,"9":1,"10":1,"11":1,"12":1,"13":1,"14":1,"21":1,"22":1,"23":1,"26":1,"28":1,"29":1,"45":1,"47":1,"48":1,"50":1,"85":2,"94":6}}],["both",{"2":{"0":1}}],["beforeend",{"2":{"127":2}}],["before",{"2":{"24":2}}],["be",{"2":{"0":1,"80":2}}],["by",{"2":{"0":1,"64":2,"138":1,"139":1}}],["px2viewport",{"2":{"124":2}}],["pxtoview",{"0":{"124":1}}],["pxtorem",{"0":{"123":1},"2":{"123":2}}],["px",{"2":{"123":1,"124":5}}],["p",{"2":{"100":4}}],["pw",{"2":{"60":1,"68":2,"80":2}}],["powered",{"2":{"64":2,"139":1}}],["polyfill",{"0":{"58":1},"2":{"58":7}}],["postcss配置",{"2":{"65":2}}],["postcss",{"0":{"122":1},"1":{"123":1,"124":1,"125":1},"2":{"57":1,"65":2,"119":1,"122":3,"123":4,"124":4,"125":1}}],["port",{"0":{"20":1},"2":{"20":1,"69":6,"80":6,"90":1}}],["png",{"2":{"52":4,"53":2,"65":2}}],["pipe",{"2":{"88":1,"132":4}}],["pipflow内置的模板引擎中",{"2":{"100":1}}],["pipflow的主要功能包括",{"2":{"88":1}}],["pipflow配置",{"2":{"65":2}}],["pipflow",{"0":{"15":1,"62":1,"67":1,"71":1,"75":1,"78":1,"81":1,"89":1},"1":{"16":1,"17":1,"63":1,"64":1,"68":1,"69":1,"72":1,"73":1,"76":1,"77":1,"79":1,"80":1,"82":1},"2":{"14":1,"15":6,"16":5,"18":1,"43":2,"44":2,"52":3,"55":1,"57":1,"58":1,"59":12,"60":6,"64":6,"65":2,"69":5,"73":4,"76":4,"77":4,"80":2,"84":7,"86":4,"88":1,"89":1,"90":12,"93":1,"94":1,"96":1,"98":1,"100":6,"103":2,"104":2,"105":2,"107":1,"114":1,"115":2,"116":2,"117":2,"121":3,"122":1,"127":4,"128":2,"129":6,"131":4,"132":2,"133":10,"134":1}}],["piflow",{"2":{"43":2}}],["pug文档",{"2":{"98":1}}],["pug是一种高度可读性的模板引擎",{"2":{"98":1}}],["pug",{"2":{"41":1,"43":2,"96":1,"98":2}}],["public",{"0":{"53":1},"2":{"32":1,"53":4,"59":2,"65":2,"92":1,"133":2}}],["publicdir",{"0":{"32":1},"2":{"32":1,"53":1}}],["per",{"2":{"25":2}}],["partials",{"2":{"100":2}}],["parallel",{"2":{"59":6,"133":7}}],["parent",{"2":{"31":2}}],["paths",{"2":{"80":2}}],["path",{"2":{"21":4,"69":4,"73":4,"80":2}}],["package",{"2":{"14":1,"57":1,"59":1,"65":2,"94":1,"133":1}}],["pages",{"2":{"110":2,"111":6,"120":4}}],["page",{"0":{"3":1,"4":1},"2":{"0":11,"3":1,"69":2,"80":2,"120":2,"138":1}}],["plugin",{"2":{"14":1}}],["plugins",{"0":{"46":1,"131":1},"2":{"14":1,"93":1,"94":2,"96":1,"100":2,"107":1,"123":2,"124":2,"125":4,"127":3,"129":2,"130":1,"131":5}}],["primary",{"2":{"44":2,"121":2}}],["provides",{"2":{"139":1}}],["provided",{"2":{"0":1,"138":1}}],["proplist",{"2":{"123":2,"124":2}}],["prod",{"2":{"85":2}}],["produces",{"2":{"73":2}}],["production",{"2":{"10":1,"59":2,"71":1,"73":4,"84":7,"85":2,"86":1,"133":2}}],["proceed",{"2":{"63":2}}],["processors",{"2":{"63":2}}],["process",{"2":{"10":1,"84":1,"85":8,"97":1}}],["projectpipflow",{"2":{"89":1}}],["project",{"2":{"63":2,"64":3,"69":2,"89":1}}],["proxyres",{"2":{"24":4}}],["proxyreq",{"2":{"24":6}}],["proxyoptions",{"2":{"24":1}}],["proxy",{"0":{"24":1},"2":{"24":10}}],["prettier配置",{"2":{"65":2}}],["prettierrc",{"2":{"65":2}}],["press",{"2":{"63":2}}],["preset",{"2":{"57":2,"58":1,"64":2,"122":1}}],["previewpipflow",{"2":{"116":1}}],["preview",{"2":{"59":4,"80":2,"90":4,"116":3}}],["preprocessoroptions",{"2":{"44":4,"121":2}}],["pre",{"2":{"0":12,"63":2}}]],"serializationVersion":2}';export{t as default}; diff --git a/assets/chunks/VPLocalSearchBox.81d87b7c.js b/assets/chunks/VPLocalSearchBox.731f09d8.js similarity index 99% rename from assets/chunks/VPLocalSearchBox.81d87b7c.js rename to assets/chunks/VPLocalSearchBox.731f09d8.js index 93a49b4..46f00cd 100644 --- a/assets/chunks/VPLocalSearchBox.81d87b7c.js +++ b/assets/chunks/VPLocalSearchBox.731f09d8.js @@ -1,4 +1,4 @@ -import{V as mt,h as oe,x as Ve,af as Nt,ag as It,d as Dt,E as we,ah as tt,g as xe,ai as _t,aj as Ot,y as Rt,ak as Mt,j as _e,O as he,S as Fe,al as Lt,am as Pt,W as zt,s as Bt,an as Vt,o as ee,b as $t,k as F,$ as Wt,l as U,ao as jt,ap as Kt,aq as Jt,c as re,n as rt,e as Ee,D as nt,F as at,a as ve,t as pe,ar as Ut,p as Ht,m as Gt,as as it,at as Qt,a4 as qt,aa as Yt,_ as Zt}from"./framework.e1e0b12f.js";import{u as Xt,c as er}from"./theme.2b85349f.js";const tr={root:()=>mt(()=>import("./@localSearchIndexroot.7fa20ba2.js"),[])};/*! +import{V as mt,h as oe,x as Ve,af as Nt,ag as It,d as Dt,E as we,ah as tt,g as xe,ai as _t,aj as Ot,y as Rt,ak as Mt,j as _e,O as he,S as Fe,al as Lt,am as Pt,W as zt,s as Bt,an as Vt,o as ee,b as $t,k as F,$ as Wt,l as U,ao as jt,ap as Kt,aq as Jt,c as re,n as rt,e as Ee,D as nt,F as at,a as ve,t as pe,ar as Ut,p as Ht,m as Gt,as as it,at as Qt,a4 as qt,aa as Yt,_ as Zt}from"./framework.e1e0b12f.js";import{u as Xt,c as er}from"./theme.3d8ad109.js";const tr={root:()=>mt(()=>import("./@localSearchIndexroot.9a311053.js"),[])};/*! * tabbable 6.2.0 * @license MIT, https://github.com/focus-trap/tabbable/blob/master/LICENSE */var yt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Ce=yt.join(","),gt=typeof Element>"u",ue=gt?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Te=!gt&&Element.prototype.getRootNode?function(o){var e;return o==null||(e=o.getRootNode)===null||e===void 0?void 0:e.call(o)}:function(o){return o==null?void 0:o.ownerDocument},ke=function o(e,t){var r;t===void 0&&(t=!0);var a=e==null||(r=e.getAttribute)===null||r===void 0?void 0:r.call(e,"inert"),n=a===""||a==="true",i=n||t&&e&&o(e.parentNode);return i},rr=function(e){var t,r=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return r===""||r==="true"},bt=function(e,t,r){if(ke(e))return[];var a=Array.prototype.slice.apply(e.querySelectorAll(Ce));return t&&ue.call(e,Ce)&&a.unshift(e),a=a.filter(r),a},wt=function o(e,t,r){for(var a=[],n=Array.from(e);n.length;){var i=n.shift();if(!ke(i,!1))if(i.tagName==="SLOT"){var s=i.assignedElements(),u=s.length?s:i.children,l=o(u,!0,r);r.flatten?a.push.apply(a,l):a.push({scopeParent:i,candidates:l})}else{var d=ue.call(i,Ce);d&&r.filter(i)&&(t||!e.includes(i))&&a.push(i);var h=i.shadowRoot||typeof r.getShadowRoot=="function"&&r.getShadowRoot(i),v=!ke(h,!1)&&(!r.shadowRootFilter||r.shadowRootFilter(i));if(h&&v){var m=o(h===!0?i.children:h.children,!0,r);r.flatten?a.push.apply(a,m):a.push({scopeParent:i,candidates:m})}else n.unshift.apply(n,i.children)}}return a},xt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},se=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||rr(e))&&!xt(e)?0:e.tabIndex},nr=function(e,t){var r=se(e);return r<0&&t&&!xt(e)?0:r},ar=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},Ft=function(e){return e.tagName==="INPUT"},ir=function(e){return Ft(e)&&e.type==="hidden"},or=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(r){return r.tagName==="SUMMARY"});return t},sr=function(e,t){for(var r=0;rsummary:first-of-type"),i=n?e.parentElement:e;if(ue.call(i,"details:not([open]) *"))return!0;if(!r||r==="full"||r==="legacy-full"){if(typeof a=="function"){for(var s=e;e;){var u=e.parentElement,l=Te(e);if(u&&!u.shadowRoot&&a(u)===!0)return ot(e);e.assignedSlot?e=e.assignedSlot:!u&&l!==e.ownerDocument?e=l.host:e=u}e=s}if(fr(e))return!e.getClientRects().length;if(r!=="legacy-full")return!0}else if(r==="non-zero-area")return ot(e);return!1},hr=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var r=0;r=0)},pr=function o(e){var t=[],r=[];return e.forEach(function(a,n){var i=!!a.scopeParent,s=i?a.scopeParent:a,u=nr(s,i),l=i?o(a.candidates):s;u===0?i?t.push.apply(t,l):t.push(s):r.push({documentOrder:n,tabIndex:u,item:a,isScope:i,content:l})}),r.sort(ar).reduce(function(a,n){return n.isScope?a.push.apply(a,n.content):a.push(n.content),a},[]).concat(t)},mr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:$e.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:vr}):r=bt(e,t.includeContainer,$e.bind(null,t)),pr(r)},yr=function(e,t){t=t||{};var r;return t.getShadowRoot?r=wt([e],t.includeContainer,{filter:Ne.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):r=bt(e,t.includeContainer,Ne.bind(null,t)),r},le=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,Ce)===!1?!1:$e(t,e)},gr=yt.concat("iframe").join(","),Oe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return ue.call(e,gr)===!1?!1:Ne(t,e)};/*! diff --git a/assets/chunks/theme.2b85349f.js b/assets/chunks/theme.3d8ad109.js similarity index 99% rename from assets/chunks/theme.2b85349f.js rename to assets/chunks/theme.3d8ad109.js index 6664af2..d25c95b 100644 --- a/assets/chunks/theme.2b85349f.js +++ b/assets/chunks/theme.3d8ad109.js @@ -1 +1 @@ -import{d as b,o as a,c as i,r as u,n as T,a as x,t as L,_ as m,b as $,w as v,T as ce,e as f,u as ze,i as De,f as ue,g as k,h as M,j as G,k as c,l,p as H,m as z,q as O,s as R,v as re,x as U,y as te,z as de,A as Ve,B as Ee,C as j,F as N,D as A,E as _e,G as Y,H as h,I as F,J as we,K as se,L as Z,M as ne,N as Fe,O as Oe,P as Le,Q as Ge,R as Ue,S as ke,U as je,V as Ke,W as Se,X as Me,Y as qe,Z as Re,$ as We,a0 as Ye}from"./framework.e1e0b12f.js";const Je=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),i("span",{class:T(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[x(L(e.text),1)],!0)],2))}});const Xe=m(Je,[["__scopeId","data-v-d9b06cb7"]]),Ze={key:0,class:"VPBackdrop"},Qe=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),$(ce,{name:"fade"},{default:v(()=>[e.show?(a(),i("div",Ze)):f("",!0)]),_:1}))}});const et=m(Qe,[["__scopeId","data-v-f754ed02"]]),P=ze;function tt(s,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(s,e):(s(),(n=!0)&&setTimeout(()=>n=!1,e))}}function le(s){return/^\//.test(s)?s:`/${s}`}function J(s){if(De(s))return s;const{site:e}=P(),{pathname:t,search:n,hash:o}=new URL(s,"http://a.com"),r=t.endsWith("/")||t.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${n}${o}`);return ue(r)}function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:o,theme:r}=P(),d=k(()=>{var _,g;return{label:(_=t.value.locales[n.value])==null?void 0:_.label,link:((g=t.value.locales[n.value])==null?void 0:g.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:k(()=>Object.entries(t.value.locales).flatMap(([_,g])=>s&&d.value.label===g.label?[]:{text:g.label,link:st(g.link||(_==="root"?"/":`/${_}/`),r.value.i18nRouting!==!1&&e,o.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)})),currentLang:d}}function st(s,e,t,n){return e?s.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):s}const nt=s=>(H("data-v-ff8a6b51"),s=s(),z(),s),ot={class:"NotFound"},at={class:"code"},rt={class:"title"},lt=nt(()=>c("div",{class:"divider"},null,-1)),it={class:"quote"},ct={class:"action"},ut=["href","aria-label"],dt=b({__name:"NotFound",setup(s){const{site:e,theme:t}=P(),{localeLinks:n}=X({removeCurrent:!1}),o=M("/");return G(()=>{var d;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((d=n.value.find(({link:p})=>p.startsWith(r)))==null?void 0:d.link)||n.value[0].link)}),(r,d)=>{var p,_,g,V,y;return a(),i("div",ot,[c("p",at,L(((p=l(t).notFound)==null?void 0:p.code)??"404"),1),c("h1",rt,L(((_=l(t).notFound)==null?void 0:_.title)??"PAGE NOT FOUND"),1),lt,c("blockquote",it,L(((g=l(t).notFound)==null?void 0:g.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),c("div",ct,[c("a",{class:"link",href:l(ue)(o.value),"aria-label":((V=l(t).notFound)==null?void 0:V.linkLabel)??"go to home"},L(((y=l(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,ut)])])}}});const _t=m(dt,[["__scopeId","data-v-ff8a6b51"]]);function Ne(s,e){if(Array.isArray(s))return Q(s);if(s==null)return[];e=le(e);const t=Object.keys(s).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(le(o))),n=t?s[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function vt(s){const e=[];let t=0;for(const n in s){const o=s[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function pt(s){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(s),e}function ie(s,e){return Array.isArray(e)?e.some(t=>ie(s,t)):O(s,e.link)?!0:e.items?ie(s,e.items):!1}function Q(s,e){return[...s].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=Q(n.items,o)),n})}function D(){const{frontmatter:s,page:e,theme:t}=P(),n=re("(min-width: 960px)"),o=M(!1),r=k(()=>{const B=t.value.sidebar,w=e.value.relativePath;return B?Ne(B,w):[]}),d=M(r.value);U(r,(B,w)=>{JSON.stringify(B)!==JSON.stringify(w)&&(d.value=r.value)});const p=k(()=>s.value.sidebar!==!1&&d.value.length>0&&s.value.layout!=="home"),_=k(()=>g?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),g=k(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),V=k(()=>p.value&&n.value),y=k(()=>p.value?vt(d.value):[]);function I(){o.value=!0}function S(){o.value=!1}function C(){o.value?S():I()}return{isOpen:o,sidebar:d,sidebarGroups:y,hasSidebar:p,hasAside:g,leftAside:_,isSidebarEnabled:V,open:I,close:S,toggle:C}}function ht(s,e){let t;te(()=>{t=s.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",n)}),de(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}const Ie=M(R?location.hash:"");R&&window.addEventListener("hashchange",()=>{Ie.value=location.hash});function ft(s){const{page:e}=P(),t=M(!1),n=k(()=>s.value.collapsed!=null),o=k(()=>!!s.value.link),r=M(!1),d=()=>{r.value=O(e.value.relativePath,s.value.link)};U([e,s,Ie],d),G(d);const p=k(()=>r.value?!0:s.value.items?ie(e.value.relativePath,s.value.items):!1),_=k(()=>!!(s.value.items&&s.value.items.length));te(()=>{t.value=!!(n.value&&s.value.collapsed)}),Ve(()=>{(r.value||p.value)&&(t.value=!1)});function g(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:p,hasChildren:_,toggle:g}}function mt(){const{hasSidebar:s}=D(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:k(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const gt=71;function ve(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function pe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{title:bt(t),link:"#"+t.id,level:n}});return $t(e,s)}function bt(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function $t(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(d=>d.level>=n&&d.level<=o);const r=[];e:for(let d=0;d=0;_--){const g=s[_];if(g.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ee(()=>{d(location.hash)}),de(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const p=[].slice.call(s.value.querySelectorAll(".outline-link")),_=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(S=>p.some(C=>C.hash===S.hash&&S.offsetParent!==null)),g=window.scrollY,V=window.innerHeight,y=document.body.offsetHeight,I=Math.abs(g+V-y)<1;if(_.length&&I){d(_[_.length-1].hash);return}for(let S=0;S<_.length;S++){const C=_[S],B=_[S+1],[w,K]=yt(S,C,B);if(w){d(K);return}}}function d(p){o&&o.classList.remove("active"),p==null?o=null:o=s.value.querySelector(`a[href="${decodeURIComponent(p)}"]`);const _=o;_?(_.classList.add("active"),e.value.style.top=_.offsetTop+33+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function ye(s){return s.parentElement.offsetTop-gt}function yt(s,e,t){const n=window.scrollY;return s===0&&n===0?[!0,null]:n{const o=j("VPDocOutlineItem",!0);return a(),i("ul",{class:T(t.root?"root":"nested")},[(a(!0),i(N,null,A(t.headers,({children:r,link:d,title:p})=>(a(),i("li",null,[c("a",{class:"outline-link",href:d,onClick:e,title:p},L(p),9,Pt),r!=null&&r.length?(a(),$(o,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}});const he=m(Vt,[["__scopeId","data-v-fc1e6dbb"]]),wt=s=>(H("data-v-e7b248a1"),s=s(),z(),s),Lt={class:"content"},St={class:"outline-title",role:"heading","aria-level":"2"},Mt={"aria-labelledby":"doc-outline-aria-label"},Nt=wt(()=>c("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),It=b({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=P(),n=_e([]);Y(()=>{n.value=pe(e.value.outline??t.value.outline)});const o=M(),r=M();return kt(o,r),(d,p)=>(a(),i("div",{class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o,role:"navigation"},[c("div",Lt,[c("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),c("div",St,L(l(ve)(l(t))),1),c("nav",Mt,[Nt,h(he,{headers:n.value,root:!0},null,8,["headers"])])])],2))}});const Tt=m(It,[["__scopeId","data-v-e7b248a1"]]),Ct={class:"VPDocAsideCarbonAds"},Bt=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(a(),i("div",Ct,[h(l(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),At=s=>(H("data-v-470b544e"),s=s(),z(),s),xt={class:"VPDocAside"},Ht=At(()=>c("div",{class:"spacer"},null,-1)),zt=b({__name:"VPDocAside",setup(s){const{theme:e}=P();return(t,n)=>(a(),i("div",xt,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),h(Tt),u(t.$slots,"aside-outline-after",{},void 0,!0),Ht,u(t.$slots,"aside-ads-before",{},void 0,!0),l(e).carbonAds?(a(),$(Bt,{key:0,"carbon-ads":l(e).carbonAds},null,8,["carbon-ads"])):f("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}});const Dt=m(zt,[["__scopeId","data-v-470b544e"]]);function Et(){const{theme:s,page:e}=P();return k(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{};let o;return typeof n=="function"?o=n(e.value):o=n.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Ft(){const{page:s,theme:e,frontmatter:t}=P();return k(()=>{var _,g,V,y,I,S,C,B;const n=Ne(e.value.sidebar,s.value.relativePath),o=pt(n),r=o.findIndex(w=>O(s.value.relativePath,w.link)),d=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((g=e.value.docFooter)==null?void 0:g.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((V=o[r-1])==null?void 0:V.docFooterText)??((y=o[r-1])==null?void 0:y.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((I=o[r-1])==null?void 0:I.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((S=o[r+1])==null?void 0:S.docFooterText)??((C=o[r+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((B=o[r+1])==null?void 0:B.link)}}})}const Ot={},Gt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ut=c("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),jt=c("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Kt=[Ut,jt];function qt(s,e){return a(),i("svg",Gt,Kt)}const Rt=m(Ot,[["render",qt]]),E=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=k(()=>e.tag??(e.href?"a":"span")),n=k(()=>e.href&&we.test(e.href));return(o,r)=>(a(),$(F(t.value),{class:T(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?l(J)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[u(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Wt={class:"VPLastUpdated"},Yt=["datetime"],Jt=b({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:n,lang:o}=P(),r=k(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),d=k(()=>r.value.toISOString()),p=M("");return G(()=>{te(()=>{var _,g,V;p.value=new Intl.DateTimeFormat((g=(_=e.value.lastUpdated)==null?void 0:_.formatOptions)!=null&&g.forceLocale?o.value:void 0,((V=e.value.lastUpdated)==null?void 0:V.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(_,g)=>{var V;return a(),i("p",Wt,[x(L(((V=l(e).lastUpdated)==null?void 0:V.text)||l(e).lastUpdatedText||"Last updated")+": ",1),c("time",{datetime:d.value},L(p.value),9,Yt)])}}});const Xt=m(Jt,[["__scopeId","data-v-112a886d"]]),Zt={key:0,class:"VPDocFooter"},Qt={key:0,class:"edit-info"},es={key:0,class:"edit-link"},ts={key:1,class:"last-updated"},ss={key:1,class:"prev-next"},ns={class:"pager"},os=["href"],as=["innerHTML"],rs=["innerHTML"],ls={class:"pager"},is=["href"],cs=["innerHTML"],us=["innerHTML"],ds=b({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=P(),o=Et(),r=Ft(),d=k(()=>e.value.editLink&&n.value.editLink!==!1),p=k(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),_=k(()=>d.value||p.value||r.value.prev||r.value.next);return(g,V)=>{var y,I,S,C,B,w;return _.value?(a(),i("footer",Zt,[u(g.$slots,"doc-footer-before",{},void 0,!0),d.value||p.value?(a(),i("div",Qt,[d.value?(a(),i("div",es,[h(E,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:v(()=>[h(Rt,{class:"edit-link-icon","aria-label":"edit icon"}),x(" "+L(l(o).text),1)]),_:1},8,["href"])])):f("",!0),p.value?(a(),i("div",ts,[h(Xt)])):f("",!0)])):f("",!0),(y=l(r).prev)!=null&&y.link||(I=l(r).next)!=null&&I.link?(a(),i("nav",ss,[c("div",ns,[(S=l(r).prev)!=null&&S.link?(a(),i("a",{key:0,class:"pager-link prev",href:l(J)(l(r).prev.link)},[c("span",{class:"desc",innerHTML:((C=l(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,as),c("span",{class:"title",innerHTML:l(r).prev.text},null,8,rs)],8,os)):f("",!0)]),c("div",ls,[(B=l(r).next)!=null&&B.link?(a(),i("a",{key:0,class:"pager-link next",href:l(J)(l(r).next.link)},[c("span",{class:"desc",innerHTML:((w=l(e).docFooter)==null?void 0:w.next)||"Next page"},null,8,cs),c("span",{class:"title",innerHTML:l(r).next.text},null,8,us)],8,is)):f("",!0)])])):f("",!0)])):f("",!0)}}});const _s=m(ds,[["__scopeId","data-v-6f497cd4"]]),vs={},ps={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},hs=c("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),fs=[hs];function ms(s,e){return a(),i("svg",ps,fs)}const fe=m(vs,[["render",ms]]),gs={key:0,class:"VPDocOutlineDropdown"},bs={key:0,class:"items"},$s=b({__name:"VPDocOutlineDropdown",setup(s){const{frontmatter:e,theme:t}=P(),n=M(!1);Y(()=>{n.value=!1});const o=_e([]);return Y(()=>{o.value=pe(e.value.outline??t.value.outline)}),(r,d)=>o.value.length>0?(a(),i("div",gs,[c("button",{onClick:d[0]||(d[0]=p=>n.value=!n.value),class:T({open:n.value})},[x(L(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2),n.value?(a(),i("div",bs,[h(he,{headers:o.value},null,8,["headers"])])):f("",!0)])):f("",!0)}});const ks=m($s,[["__scopeId","data-v-5d13abc5"]]),ys=s=>(H("data-v-80010f0c"),s=s(),z(),s),Ps={class:"container"},Vs=ys(()=>c("div",{class:"aside-curtain"},null,-1)),ws={class:"aside-container"},Ls={class:"aside-content"},Ss={class:"content"},Ms={class:"content-container"},Ns={class:"main"},Is=b({__name:"VPDoc",setup(s){const{theme:e}=P(),t=se(),{hasSidebar:n,hasAside:o,leftAside:r}=D(),d=k(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(p,_)=>{const g=j("Content");return a(),i("div",{class:T(["VPDoc",{"has-sidebar":l(n),"has-aside":l(o)}])},[u(p.$slots,"doc-top",{},void 0,!0),c("div",Ps,[l(o)?(a(),i("div",{key:0,class:T(["aside",{"left-aside":l(r)}])},[Vs,c("div",ws,[c("div",Ls,[h(Dt,null,{"aside-top":v(()=>[u(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),c("div",Ss,[c("div",Ms,[u(p.$slots,"doc-before",{},void 0,!0),h(ks),c("main",Ns,[h(g,{class:T(["vp-doc",[d.value,l(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),h(_s,null,{"doc-footer-before":v(()=>[u(p.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(p.$slots,"doc-after",{},void 0,!0)])])]),u(p.$slots,"doc-bottom",{},void 0,!0)],2)}}});const Ts=m(Is,[["__scopeId","data-v-80010f0c"]]),Cs=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(s){const e=s,t=k(()=>e.href&&we.test(e.href)),n=k(()=>e.tag||e.href?"a":"button");return(o,r)=>(a(),$(F(n.value),{class:T(["VPButton",[o.size,o.theme]]),href:o.href?l(J)(o.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:v(()=>[x(L(o.text),1)]),_:1},8,["class","href","target","rel"]))}});const Bs=m(Cs,[["__scopeId","data-v-c2d0dde3"]]),As=["src","alt"],xs=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=j("VPImage",!0);return e.image?(a(),i(N,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",Z({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:l(ue)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,As)):(a(),i(N,{key:1},[h(n,Z({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),h(n,Z({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}});const ee=m(xs,[["__scopeId","data-v-6b741c7d"]]),Hs=s=>(H("data-v-95b00d9a"),s=s(),z(),s),zs={class:"container"},Ds={class:"main"},Es={key:0,class:"name"},Fs=["innerHTML"],Os=["innerHTML"],Gs=["innerHTML"],Us={key:0,class:"actions"},js={key:0,class:"image"},Ks={class:"image-container"},qs=Hs(()=>c("div",{class:"image-bg"},null,-1)),Rs=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=ne("hero-image-slot-exists");return(t,n)=>(a(),i("div",{class:T(["VPHero",{"has-image":t.image||l(e)}])},[c("div",zs,[c("div",Ds,[u(t.$slots,"home-hero-info",{},()=>[t.name?(a(),i("h1",Es,[c("span",{innerHTML:t.name,class:"clip"},null,8,Fs)])):f("",!0),t.text?(a(),i("p",{key:1,innerHTML:t.text,class:"text"},null,8,Os)):f("",!0),t.tagline?(a(),i("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Gs)):f("",!0)],!0),t.actions?(a(),i("div",Us,[(a(!0),i(N,null,A(t.actions,o=>(a(),i("div",{key:o.link,class:"action"},[h(Bs,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||l(e)?(a(),i("div",js,[c("div",Ks,[qs,u(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(ee,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}});const Ws=m(Rs,[["__scopeId","data-v-95b00d9a"]]),Ys=b({__name:"VPHomeHero",setup(s){const{frontmatter:e}=P();return(t,n)=>l(e).hero?(a(),$(Ws,{key:0,class:"VPHomeHero",name:l(e).hero.name,text:l(e).hero.text,tagline:l(e).hero.tagline,image:l(e).hero.image,actions:l(e).hero.actions},{"home-hero-info":v(()=>[u(t.$slots,"home-hero-info")]),"home-hero-image":v(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Js={},Xs={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Zs=c("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Qs=[Zs];function en(s,e){return a(),i("svg",Xs,Qs)}const tn=m(Js,[["render",en]]),sn={class:"box"},nn={key:0,class:"icon"},on=["innerHTML"],an=["innerHTML"],rn=["innerHTML"],ln={key:4,class:"link-text"},cn={class:"link-text-value"},un=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),$(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[c("article",sn,[typeof e.icon=="object"&&e.icon.wrap?(a(),i("div",nn,[h(ee,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(ee,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",{key:2,class:"icon",innerHTML:e.icon},null,8,on)):f("",!0),c("h2",{class:"title",innerHTML:e.title},null,8,an),e.details?(a(),i("p",{key:3,class:"details",innerHTML:e.details},null,8,rn)):f("",!0),e.linkText?(a(),i("div",ln,[c("p",cn,[x(L(e.linkText)+" ",1),h(tn,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}});const dn=m(un,[["__scopeId","data-v-5c6842f0"]]),_n={key:0,class:"VPFeatures"},vn={class:"container"},pn={class:"items"},hn=b({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=k(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(a(),i("div",_n,[c("div",vn,[c("div",pn,[(a(!0),i(N,null,A(n.features,r=>(a(),i("div",{key:r.title,class:T(["item",[t.value]])},[h(dn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}});const fn=m(hn,[["__scopeId","data-v-179bf1de"]]),mn=b({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=P();return(t,n)=>l(e).features?(a(),$(fn,{key:0,class:"VPHomeFeatures",features:l(e).features},null,8,["features"])):f("",!0)}}),gn={class:"VPHome"},bn=b({__name:"VPHome",setup(s){return(e,t)=>{const n=j("Content");return a(),i("div",gn,[u(e.$slots,"home-hero-before",{},void 0,!0),h(Ys,null,{"home-hero-info":v(()=>[u(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(e.$slots,"home-hero-after",{},void 0,!0),u(e.$slots,"home-features-before",{},void 0,!0),h(mn),u(e.$slots,"home-features-after",{},void 0,!0),h(n)])}}});const $n=m(bn,[["__scopeId","data-v-4206cc72"]]),kn={},yn={class:"VPPage"};function Pn(s,e){const t=j("Content");return a(),i("div",yn,[u(s.$slots,"page-top"),h(t),u(s.$slots,"page-bottom")])}const Vn=m(kn,[["render",Pn]]),wn=b({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=D();return(o,r)=>(a(),i("div",{class:T(["VPContent",{"has-sidebar":l(n),"is-home":l(t).layout==="home"}]),id:"VPContent"},[l(e).isNotFound?u(o.$slots,"not-found",{key:0},()=>[h(_t)],!0):l(t).layout==="page"?(a(),$(Vn,{key:1},{"page-top":v(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(t).layout==="home"?(a(),$($n,{key:2},{"home-hero-before":v(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(t).layout&&l(t).layout!=="doc"?(a(),$(F(l(t).layout),{key:3})):(a(),$(Ts,{key:4},{"doc-top":v(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const Ln=m(wn,[["__scopeId","data-v-88f69216"]]),Sn={class:"container"},Mn=["innerHTML"],Nn=["innerHTML"],In=b({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=D();return(o,r)=>l(e).footer&&l(t).footer!==!1?(a(),i("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(n)}])},[c("div",Sn,[l(e).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:l(e).footer.message},null,8,Mn)):f("",!0),l(e).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:l(e).footer.copyright},null,8,Nn)):f("",!0)])],2)):f("",!0)}});const Tn=m(In,[["__scopeId","data-v-489d7418"]]),Cn={class:"header"},Bn={class:"outline"},An=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=P(),n=M(!1),o=M(0),r=M();Y(()=>{n.value=!1});function d(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(g){g.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Oe(()=>{n.value=!1}))}function _(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,V)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"})},[g.headers.length>0?(a(),i("button",{key:0,onClick:d,class:T({open:n.value})},[x(L(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2)):(a(),i("button",{key:1,onClick:_},L(l(t).returnToTopLabel||"Return to top"),1)),h(ce,{name:"flyout"},{default:v(()=>[n.value?(a(),i("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:p},[c("div",Cn,[c("a",{class:"top-link",href:"#",onClick:_},L(l(t).returnToTopLabel||"Return to top"),1)]),c("div",Bn,[h(he,{headers:g.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}});const xn=m(An,[["__scopeId","data-v-746b8b3e"]]),Hn={},zn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Dn=c("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),En=c("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),Fn=c("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),On=c("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Gn=[Dn,En,Fn,On];function Un(s,e){return a(),i("svg",zn,Gn)}const jn=m(Hn,[["render",Un]]),Kn=["aria-expanded"],qn={class:"menu-text"},Rn=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=D(),{y:o}=Le(),r=_e([]),d=M(0);G(()=>{d.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Y(()=>{r.value=pe(t.value.outline??e.value.outline)});const p=k(()=>r.value.length===0&&!n.value),_=k(()=>({VPLocalNav:!0,fixed:p.value,"reached-top":o.value>=d.value}));return(g,V)=>l(t).layout!=="home"&&(!p.value||l(o)>=d.value)?(a(),i("div",{key:0,class:T(_.value)},[l(n)?(a(),i("button",{key:0,class:"menu","aria-expanded":g.open,"aria-controls":"VPSidebarNav",onClick:V[0]||(V[0]=y=>g.$emit("open-menu"))},[h(jn,{class:"menu-icon"}),c("span",qn,L(l(e).sidebarMenuLabel||"Menu"),1)],8,Kn)):f("",!0),h(xn,{headers:r.value,navHeight:d.value},null,8,["headers","navHeight"])],2)):f("",!0)}});const Wn=m(Rn,[["__scopeId","data-v-41aecf3b"]]);function Yn(){const s=M(!1);function e(){s.value=!0,window.addEventListener("resize",o)}function t(){s.value=!1,window.removeEventListener("resize",o)}function n(){s.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=se();return U(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const Jn={},Xn={class:"VPSwitch",type:"button",role:"switch"},Zn={class:"check"},Qn={key:0,class:"icon"};function eo(s,e){return a(),i("button",Xn,[c("span",Zn,[s.$slots.default?(a(),i("span",Qn,[u(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const to=m(Jn,[["render",eo],["__scopeId","data-v-55c70256"]]),so={},no={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},oo=c("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),ao=[oo];function ro(s,e){return a(),i("svg",no,ao)}const lo=m(so,[["render",ro]]),io={},co={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},uo=Ge('',9),_o=[uo];function vo(s,e){return a(),i("svg",co,_o)}const po=m(io,[["render",vo]]),ho=b({__name:"VPSwitchAppearance",setup(s){const{isDark:e}=P(),t=ne("toggle-appearance",()=>{e.value=!e.value});return(n,o)=>(a(),$(to,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":l(e),onClick:l(t)},{default:v(()=>[h(po,{class:"sun"}),h(lo,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const me=m(ho,[["__scopeId","data-v-f9719704"]]),fo={key:0,class:"VPNavBarAppearance"},mo=b({__name:"VPNavBarAppearance",setup(s){const{site:e}=P();return(t,n)=>l(e).appearance&&l(e).appearance!=="force-dark"?(a(),i("div",fo,[h(me)])):f("",!0)}});const go=m(mo,[["__scopeId","data-v-e9d6c9ee"]]),ge=M();let Te=!1,ae=0;function bo(s){const e=M(!1);if(R){!Te&&$o(),ae++;const t=U(ge,n=>{var o,r,d;n===s.el.value||(o=s.el.value)!=null&&o.contains(n)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(d=s.onBlur)==null||d.call(s))});de(()=>{t(),ae--,ae||ko()})}return Ue(e)}function $o(){document.addEventListener("focusin",Ce),Te=!0,ge.value=document.activeElement}function ko(){document.removeEventListener("focusin",Ce)}function Ce(){ge.value=document.activeElement}const yo={},Po={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Vo=c("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),wo=[Vo];function Lo(s,e){return a(),i("svg",Po,wo)}const Be=m(yo,[["render",Lo]]),So={},Mo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},No=c("circle",{cx:"12",cy:"12",r:"2"},null,-1),Io=c("circle",{cx:"19",cy:"12",r:"2"},null,-1),To=c("circle",{cx:"5",cy:"12",r:"2"},null,-1),Co=[No,Io,To];function Bo(s,e){return a(),i("svg",Mo,Co)}const Ao=m(So,[["render",Bo]]),xo={class:"VPMenuLink"},Ho=b({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,n)=>(a(),i("div",xo,[h(E,{class:T({active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const oe=m(Ho,[["__scopeId","data-v-94a0caeb"]]),zo={class:"VPMenuGroup"},Do={key:0,class:"title"},Eo=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",zo,[e.text?(a(),i("p",Do,L(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),i(N,null,["link"in n?(a(),$(oe,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}});const Fo=m(Eo,[["__scopeId","data-v-6ab6a63a"]]),Oo={class:"VPMenu"},Go={key:0,class:"items"},Uo=b({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),i("div",Oo,[e.items?(a(),i("div",Go,[(a(!0),i(N,null,A(e.items,n=>(a(),i(N,{key:n.text},["link"in n?(a(),$(oe,{key:0,item:n},null,8,["item"])):(a(),$(Fo,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),u(e.$slots,"default",{},void 0,!0)]))}});const jo=m(Uo,[["__scopeId","data-v-8148ee14"]]),Ko=["aria-expanded","aria-label"],qo={key:0,class:"text"},Ro=["innerHTML"],Wo={class:"menu"},Yo=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=M(!1),t=M();bo({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=d=>e.value=!0),onMouseleave:r[2]||(r[2]=d=>e.value=!1)},[c("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=d=>e.value=!e.value)},[o.button||o.icon?(a(),i("span",qo,[o.icon?(a(),$(F(o.icon),{key:0,class:"option-icon"})):f("",!0),o.button?(a(),i("span",{key:1,innerHTML:o.button},null,8,Ro)):f("",!0),h(Be,{class:"text-icon"})])):(a(),$(Ao,{key:1,class:"icon"}))],8,Ko),c("div",Wo,[h(jo,{items:o.items},{default:v(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const be=m(Yo,[["__scopeId","data-v-2e639d93"]]),Jo={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},Xo=["href","aria-label","innerHTML"],Zo=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=k(()=>typeof e.icon=="object"?e.icon.svg:Jo[e.icon]);return(n,o)=>(a(),i("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Xo))}});const Qo=m(Zo,[["__scopeId","data-v-c8ada7f5"]]),ea={class:"VPSocialLinks"},ta=b({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),i("div",ea,[(a(!0),i(N,null,A(e.links,({link:n,icon:o,ariaLabel:r})=>(a(),$(Qo,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}});const $e=m(ta,[["__scopeId","data-v-1663f158"]]),sa={key:0,class:"group translations"},na={class:"trans-title"},oa={key:1,class:"group"},aa={class:"item appearance"},ra={class:"label"},la={class:"appearance-action"},ia={key:2,class:"group"},ca={class:"item social-links"},ua=b({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:o}=X({correspondingLink:!0}),r=k(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(d,p)=>r.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[l(n).length&&l(o).label?(a(),i("div",sa,[c("p",na,L(l(o).label),1),(a(!0),i(N,null,A(l(n),_=>(a(),$(oe,{key:_.link,item:_},null,8,["item"]))),128))])):f("",!0),l(e).appearance?(a(),i("div",oa,[c("div",aa,[c("p",ra,L(l(t).darkModeSwitchLabel||"Appearance"),1),c("div",la,[h(me)])])])):f("",!0),l(t).socialLinks?(a(),i("div",ia,[c("div",ca,[h($e,{class:"social-links-list",links:l(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}});const da=m(ua,[["__scopeId","data-v-3abe5206"]]),_a=s=>(H("data-v-a5b09a9d"),s=s(),z(),s),va=["aria-expanded"],pa=_a(()=>c("span",{class:"container"},[c("span",{class:"top"}),c("span",{class:"middle"}),c("span",{class:"bottom"})],-1)),ha=[pa],fa=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),i("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},ha,10,va))}});const ma=m(fa,[["__scopeId","data-v-a5b09a9d"]]),ga=["innerHTML"],ba=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,n)=>(a(),$(E,{class:T({VPNavBarMenuLink:!0,active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[c("span",{innerHTML:t.item.text},null,8,ga)]),_:1},8,["class","href","target","rel"]))}});const $a=m(ba,[["__scopeId","data-v-f5e86147"]]),ka=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=P(),n=r=>"link"in r?O(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=k(()=>n(e.item));return(r,d)=>(a(),$(be,{class:T({VPNavBarMenuGroup:!0,active:l(O)(l(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),ya=s=>(H("data-v-39a6d6d3"),s=s(),z(),s),Pa={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Va=ya(()=>c("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),wa=b({__name:"VPNavBarMenu",setup(s){const{theme:e}=P();return(t,n)=>l(e).nav?(a(),i("nav",Pa,[Va,(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),$($a,{key:0,item:o},null,8,["item"])):(a(),$(ka,{key:1,item:o},null,8,["item"]))],64))),128))])):f("",!0)}});const La=m(wa,[["__scopeId","data-v-39a6d6d3"]]);function Sa(s,e){const{localeIndex:t}=P();function n(o){var S,C;const r=o.split("."),d=s&&typeof s=="object",p=d&&((C=(S=s.locales)==null?void 0:S[t.value])==null?void 0:C.translations)||null,_=d&&s.translations||null;let g=p,V=_,y=e;const I=r.pop();for(const B of r){let w=null;const K=y==null?void 0:y[B];K&&(w=y=K);const W=V==null?void 0:V[B];W&&(w=V=W);const q=g==null?void 0:g[B];q&&(w=g=q),K||(y=w),W||(V=w),q||(g=w)}return(g==null?void 0:g[I])??(V==null?void 0:V[I])??(y==null?void 0:y[I])??""}return n}const Ma=["aria-label"],Na={class:"DocSearch-Button-Container"},Ia=c("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[c("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),Ta={class:"DocSearch-Button-Placeholder"},Ca=c("span",{class:"DocSearch-Button-Keys"},[c("kbd",{class:"DocSearch-Button-Key"}),c("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Pe=b({__name:"VPNavBarSearchButton",setup(s){var o;const{theme:e}=P(),t={button:{buttonText:"Search",buttonAriaLabel:"Search"}},n=Sa((o=e.value.search)==null?void 0:o.options,t);return(r,d)=>(a(),i("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(n)("button.buttonAriaLabel")},[c("span",Na,[Ia,c("span",Ta,L(l(n)("button.buttonText")),1)]),Ca],8,Ma))}});const Ba={class:"VPNavBarSearch"},Aa={id:"local-search"},xa={key:1,id:"docsearch"},Ha=b({__name:"VPNavBarSearch",setup(s){const e=je(()=>Ke(()=>import("./VPLocalSearchBox.81d87b7c.js"),["assets/chunks/VPLocalSearchBox.81d87b7c.js","assets/chunks/framework.e1e0b12f.js"])),t=()=>null,{theme:n}=P(),o=M(!1),r=M(!1);G(()=>{});function d(){o.value||(o.value=!0,setTimeout(p,16))}function p(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function _(y){const I=y.target,S=I.tagName;return I.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const g=M(!1);ke("k",y=>{(y.ctrlKey||y.metaKey)&&(y.preventDefault(),g.value=!0)}),ke("/",y=>{_(y)||(y.preventDefault(),g.value=!0)});const V="local";return(y,I)=>{var S;return a(),i("div",Ba,[l(V)==="local"?(a(),i(N,{key:0},[g.value?(a(),$(l(e),{key:0,onClose:I[0]||(I[0]=C=>g.value=!1)})):f("",!0),c("div",Aa,[h(Pe,{onClick:I[1]||(I[1]=C=>g.value=!0)})])],64)):l(V)==="algolia"?(a(),i(N,{key:1},[o.value?(a(),$(l(t),{key:0,algolia:((S=l(n).search)==null?void 0:S.options)??l(n).algolia,onVnodeBeforeMount:I[2]||(I[2]=C=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),i("div",xa,[h(Pe,{onClick:d})]))],64)):f("",!0)])}}});const za=b({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=P();return(t,n)=>l(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}});const Da=m(za,[["__scopeId","data-v-4a30f6f6"]]),Ea=["href"],Fa=b({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=P(),{hasSidebar:n}=D(),{currentLang:o}=X();return(r,d)=>(a(),i("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(n)}])},[c("a",{class:"title",href:l(t).logoLink??l(J)(l(o).link)},[u(r.$slots,"nav-bar-title-before",{},void 0,!0),l(t).logo?(a(),$(ee,{key:0,class:"logo",image:l(t).logo},null,8,["image"])):f("",!0),l(t).siteTitle?(a(),i(N,{key:1},[x(L(l(t).siteTitle),1)],64)):l(t).siteTitle===void 0?(a(),i(N,{key:2},[x(L(l(e).title),1)],64)):f("",!0),u(r.$slots,"nav-bar-title-after",{},void 0,!0)],8,Ea)],2))}});const Oa=m(Fa,[["__scopeId","data-v-b48f9446"]]),Ga={},Ua={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ja=c("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ka=c("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),qa=[ja,Ka];function Ra(s,e){return a(),i("svg",Ua,qa)}const Ae=m(Ga,[["render",Ra]]),Wa={class:"items"},Ya={class:"title"},Ja=b({__name:"VPNavBarTranslations",setup(s){const{theme:e}=P(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(o,r)=>l(t).length&&l(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:Ae,label:l(e).langMenuLabel||"Change language"},{default:v(()=>[c("div",Wa,[c("p",Ya,L(l(n).label),1),(a(!0),i(N,null,A(l(t),d=>(a(),$(oe,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}});const Xa=m(Ja,[["__scopeId","data-v-0b7808b1"]]),Za=s=>(H("data-v-b720888e"),s=s(),z(),s),Qa={class:"container"},er={class:"title"},tr={class:"content"},sr=Za(()=>c("div",{class:"curtain"},null,-1)),nr={class:"content-body"},or=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Le(),{hasSidebar:t}=D(),{frontmatter:n}=P(),o=M({});return Ve(()=>{o.value={"has-sidebar":t.value,top:n.value.layout==="home"&&e.value===0}}),(r,d)=>(a(),i("div",{class:T(["VPNavBar",o.value])},[c("div",Qa,[c("div",er,[h(Oa,null,{"nav-bar-title-before":v(()=>[u(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),c("div",tr,[sr,c("div",nr,[u(r.$slots,"nav-bar-content-before",{},void 0,!0),h(Ha,{class:"search"}),h(La,{class:"menu"}),h(Xa,{class:"translations"}),h(go,{class:"appearance"}),h(Da,{class:"social-links"}),h(da,{class:"extra"}),u(r.$slots,"nav-bar-content-after",{},void 0,!0),h(ma,{class:"hamburger",active:r.isScreenOpen,onClick:d[0]||(d[0]=p=>r.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const ar=m(or,[["__scopeId","data-v-b720888e"]]),rr={key:0,class:"VPNavScreenAppearance"},lr={class:"text"},ir=b({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=P();return(n,o)=>l(e).appearance?(a(),i("div",rr,[c("p",lr,L(l(t).darkModeSwitchLabel||"Appearance"),1),h(me)])):f("",!0)}});const cr=m(ir,[["__scopeId","data-v-0a19e25b"]]),ur=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,n)=>(a(),$(E,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const dr=m(ur,[["__scopeId","data-v-9cb5ef7f"]]),_r={},vr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},pr=c("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),hr=[pr];function fr(s,e){return a(),i("svg",vr,hr)}const mr=m(_r,[["render",fr]]),gr=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,n)=>(a(),$(E,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const xe=m(gr,[["__scopeId","data-v-dee1d2df"]]),br={class:"VPNavScreenMenuGroupSection"},$r={key:0,class:"title"},kr=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",br,[e.text?(a(),i("p",$r,L(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),$(xe,{key:n.text,item:n},null,8,["item"]))),128))]))}});const yr=m(kr,[["__scopeId","data-v-644fb433"]]),Pr=["aria-controls","aria-expanded"],Vr={class:"button-text"},wr=["id"],Lr={key:1,class:"group"},Sr=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=M(!1),n=k(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,d)=>(a(),i("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[c("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[c("span",Vr,L(r.text),1),h(mr,{class:"button-icon"})],8,Pr),c("div",{id:n.value,class:"items"},[(a(!0),i(N,null,A(r.items,p=>(a(),i(N,{key:p.text},["link"in p?(a(),i("div",{key:p.text,class:"item"},[h(xe,{item:p},null,8,["item"])])):(a(),i("div",Lr,[h(yr,{text:p.text,items:p.items},null,8,["text","items"])]))],64))),128))],8,wr)],2))}});const Mr=m(Sr,[["__scopeId","data-v-13dc6861"]]),Nr={key:0,class:"VPNavScreenMenu"},Ir=b({__name:"VPNavScreenMenu",setup(s){const{theme:e}=P();return(t,n)=>l(e).nav?(a(),i("nav",Nr,[(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),$(dr,{key:0,item:o},null,8,["item"])):(a(),$(Mr,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Tr=b({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=P();return(t,n)=>l(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}}),Cr={class:"list"},Br=b({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=M(!1);function o(){n.value=!n.value}return(r,d)=>l(e).length&&l(t).label?(a(),i("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[c("button",{class:"title",onClick:o},[h(Ae,{class:"icon lang"}),x(" "+L(l(t).label)+" ",1),h(Be,{class:"icon chevron"})]),c("ul",Cr,[(a(!0),i(N,null,A(l(e),p=>(a(),i("li",{key:p.link,class:"item"},[h(E,{class:"link",href:p.link},{default:v(()=>[x(L(p.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}});const Ar=m(Br,[["__scopeId","data-v-5610ffda"]]),xr={class:"container"},Hr=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=M(null),t=Se(R?document.body:null);return(n,o)=>(a(),$(ce,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:v(()=>[n.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[c("div",xr,[u(n.$slots,"nav-screen-content-before",{},void 0,!0),h(Ir,{class:"menu"}),h(Ar,{class:"translations"}),h(cr,{class:"appearance"}),h(Tr,{class:"social-links"}),u(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}});const zr=m(Hr,[["__scopeId","data-v-5f2e656f"]]),Dr={key:0,class:"VPNav"},Er=b({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Yn(),{frontmatter:o}=P(),r=k(()=>o.value.navbar!==!1);return Me("close-screen",t),te(()=>{R&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(d,p)=>r.value?(a(),i("header",Dr,[h(ar,{"is-screen-open":l(e),onToggleScreen:l(n)},{"nav-bar-title-before":v(()=>[u(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(d.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(zr,{open:l(e)},{"nav-screen-content-before":v(()=>[u(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}});const Fr=m(Er,[["__scopeId","data-v-aa833acb"]]),Or=s=>(H("data-v-2510404c"),s=s(),z(),s),Gr=["role","tabindex"],Ur=Or(()=>c("div",{class:"indicator"},null,-1)),jr=["onKeydown"],Kr={key:1,class:"items"},qr=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:d,hasChildren:p,toggle:_}=ft(k(()=>e.item)),g=k(()=>p.value?"section":"div"),V=k(()=>o.value?"a":"div"),y=k(()=>p.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),I=k(()=>o.value?void 0:"button"),S=k(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":d.value}]);function C(w){"key"in w&&w.key!=="Enter"||!e.item.link&&_()}function B(){e.item.link&&_()}return(w,K)=>{const W=j("VPSidebarItem",!0);return a(),$(F(g.value),{class:T(["VPSidebarItem",S.value])},{default:v(()=>[w.item.text?(a(),i("div",Z({key:0,class:"item",role:I.value},Re(w.item.items?{click:C,keydown:C}:{},!0),{tabindex:w.item.items&&0}),[Ur,w.item.link?(a(),$(E,{key:0,tag:V.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:v(()=>[(a(),$(F(y.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(F(y.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:qe(B,["enter"]),tabindex:"0"},[h(fe,{class:"caret-icon"})],40,jr)):f("",!0)],16,Gr)):f("",!0),w.item.items&&w.item.items.length?(a(),i("div",Kr,[w.depth<5?(a(!0),i(N,{key:0},A(w.item.items,q=>(a(),$(W,{key:q.text,item:q,depth:w.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}});const Rr=m(qr,[["__scopeId","data-v-2510404c"]]),He=s=>(H("data-v-20082c87"),s=s(),z(),s),Wr=He(()=>c("div",{class:"curtain"},null,-1)),Yr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Jr=He(()=>c("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Xr=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=D(),n=s,o=M(null),r=Se(R?document.body:null);return U([n,o],()=>{var d;n.open?(r.value=!0,(d=o.value)==null||d.focus()):r.value=!1},{immediate:!0,flush:"post"}),(d,p)=>l(t)?(a(),i("aside",{key:0,class:T(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:p[0]||(p[0]=We(()=>{},["stop"]))},[Wr,c("nav",Yr,[Jr,u(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(N,null,A(l(e),_=>(a(),i("div",{key:_.text,class:"group"},[h(Rr,{item:_,depth:0},null,8,["item"])]))),128)),u(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}});const Zr=m(Xr,[["__scopeId","data-v-20082c87"]]),Qr=b({__name:"VPSkipLink",setup(s){const e=se(),t=M();U(()=>e.path,()=>t.value.focus());function n({target:o}){const r=document.getElementById(decodeURIComponent(o.hash).slice(1));if(r){const d=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",d)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",d),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(a(),i(N,null,[c("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),c("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}});const el=m(Qr,[["__scopeId","data-v-d2de3463"]]),tl=b({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=D(),o=se();U(()=>o.path,n),ht(e,n);const{frontmatter:r}=P(),d=Ye(),p=k(()=>!!d["home-hero-image"]);return Me("hero-image-slot-exists",p),(_,g)=>{const V=j("Content");return l(r).layout!==!1?(a(),i("div",{key:0,class:T(["Layout",l(r).pageClass])},[u(_.$slots,"layout-top",{},void 0,!0),h(el),h(et,{class:"backdrop",show:l(e),onClick:l(n)},null,8,["show","onClick"]),h(Fr,null,{"nav-bar-title-before":v(()=>[u(_.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(_.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(_.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(_.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(_.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(_.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(Wn,{open:l(e),onOpenMenu:l(t)},null,8,["open","onOpenMenu"]),h(Zr,{open:l(e)},{"sidebar-nav-before":v(()=>[u(_.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(_.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(Ln,null,{"page-top":v(()=>[u(_.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(_.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[u(_.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(_.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(_.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(_.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(_.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(_.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(_.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(_.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(_.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(_.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[u(_.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(_.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[u(_.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(_.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(_.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(_.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(_.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(_.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(Tn),u(_.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(V,{key:1}))}}});const sl=m(tl,[["__scopeId","data-v-ad6a442f"]]);const ol={Layout:sl,enhanceApp:({app:s})=>{s.component("Badge",Xe)}};export{Sa as c,ol as t,P as u}; +import{d as b,o as a,c as i,r as u,n as T,a as x,t as L,_ as m,b as $,w as v,T as ce,e as f,u as ze,i as De,f as ue,g as k,h as M,j as G,k as c,l,p as H,m as z,q as O,s as R,v as re,x as U,y as te,z as de,A as Ve,B as Ee,C as j,F as N,D as A,E as _e,G as Y,H as h,I as F,J as we,K as se,L as Z,M as ne,N as Fe,O as Oe,P as Le,Q as Ge,R as Ue,S as ke,U as je,V as Ke,W as Se,X as Me,Y as qe,Z as Re,$ as We,a0 as Ye}from"./framework.e1e0b12f.js";const Je=b({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(s){return(e,t)=>(a(),i("span",{class:T(["VPBadge",e.type])},[u(e.$slots,"default",{},()=>[x(L(e.text),1)],!0)],2))}});const Xe=m(Je,[["__scopeId","data-v-d9b06cb7"]]),Ze={key:0,class:"VPBackdrop"},Qe=b({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(s){return(e,t)=>(a(),$(ce,{name:"fade"},{default:v(()=>[e.show?(a(),i("div",Ze)):f("",!0)]),_:1}))}});const et=m(Qe,[["__scopeId","data-v-f754ed02"]]),P=ze;function tt(s,e){let t,n=!1;return()=>{t&&clearTimeout(t),n?t=setTimeout(s,e):(s(),(n=!0)&&setTimeout(()=>n=!1,e))}}function le(s){return/^\//.test(s)?s:`/${s}`}function J(s){if(De(s))return s;const{site:e}=P(),{pathname:t,search:n,hash:o}=new URL(s,"http://a.com"),r=t.endsWith("/")||t.endsWith(".html")?s:s.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,e.value.cleanUrls?"":".html")}${n}${o}`);return ue(r)}function X({removeCurrent:s=!0,correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:o,theme:r}=P(),d=k(()=>{var _,g;return{label:(_=t.value.locales[n.value])==null?void 0:_.label,link:((g=t.value.locales[n.value])==null?void 0:g.link)||(n.value==="root"?"/":`/${n.value}/`)}});return{localeLinks:k(()=>Object.entries(t.value.locales).flatMap(([_,g])=>s&&d.value.label===g.label?[]:{text:g.label,link:st(g.link||(_==="root"?"/":`/${_}/`),r.value.i18nRouting!==!1&&e,o.value.relativePath.slice(d.value.link.length-1),!t.value.cleanUrls)})),currentLang:d}}function st(s,e,t,n){return e?s.replace(/\/$/,"")+le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,n?".html":"")):s}const nt=s=>(H("data-v-ff8a6b51"),s=s(),z(),s),ot={class:"NotFound"},at={class:"code"},rt={class:"title"},lt=nt(()=>c("div",{class:"divider"},null,-1)),it={class:"quote"},ct={class:"action"},ut=["href","aria-label"],dt=b({__name:"NotFound",setup(s){const{site:e,theme:t}=P(),{localeLinks:n}=X({removeCurrent:!1}),o=M("/");return G(()=>{var d;const r=window.location.pathname.replace(e.value.base,"").replace(/(^.*?\/).*$/,"/$1");n.value.length&&(o.value=((d=n.value.find(({link:p})=>p.startsWith(r)))==null?void 0:d.link)||n.value[0].link)}),(r,d)=>{var p,_,g,V,y;return a(),i("div",ot,[c("p",at,L(((p=l(t).notFound)==null?void 0:p.code)??"404"),1),c("h1",rt,L(((_=l(t).notFound)==null?void 0:_.title)??"PAGE NOT FOUND"),1),lt,c("blockquote",it,L(((g=l(t).notFound)==null?void 0:g.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),c("div",ct,[c("a",{class:"link",href:l(ue)(o.value),"aria-label":((V=l(t).notFound)==null?void 0:V.linkLabel)??"go to home"},L(((y=l(t).notFound)==null?void 0:y.linkText)??"Take me home"),9,ut)])])}}});const _t=m(dt,[["__scopeId","data-v-ff8a6b51"]]);function Ne(s,e){if(Array.isArray(s))return Q(s);if(s==null)return[];e=le(e);const t=Object.keys(s).sort((o,r)=>r.split("/").length-o.split("/").length).find(o=>e.startsWith(le(o))),n=t?s[t]:[];return Array.isArray(n)?Q(n):Q(n.items,n.base)}function vt(s){const e=[];let t=0;for(const n in s){const o=s[n];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function pt(s){const e=[];function t(n){for(const o of n)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(s),e}function ie(s,e){return Array.isArray(e)?e.some(t=>ie(s,t)):O(s,e.link)?!0:e.items?ie(s,e.items):!1}function Q(s,e){return[...s].map(t=>{const n={...t},o=n.base||e;return o&&n.link&&(n.link=o+n.link),n.items&&(n.items=Q(n.items,o)),n})}function D(){const{frontmatter:s,page:e,theme:t}=P(),n=re("(min-width: 960px)"),o=M(!1),r=k(()=>{const B=t.value.sidebar,w=e.value.relativePath;return B?Ne(B,w):[]}),d=M(r.value);U(r,(B,w)=>{JSON.stringify(B)!==JSON.stringify(w)&&(d.value=r.value)});const p=k(()=>s.value.sidebar!==!1&&d.value.length>0&&s.value.layout!=="home"),_=k(()=>g?s.value.aside==null?t.value.aside==="left":s.value.aside==="left":!1),g=k(()=>s.value.layout==="home"?!1:s.value.aside!=null?!!s.value.aside:t.value.aside!==!1),V=k(()=>p.value&&n.value),y=k(()=>p.value?vt(d.value):[]);function I(){o.value=!0}function S(){o.value=!1}function C(){o.value?S():I()}return{isOpen:o,sidebar:d,sidebarGroups:y,hasSidebar:p,hasAside:g,leftAside:_,isSidebarEnabled:V,open:I,close:S,toggle:C}}function ht(s,e){let t;te(()=>{t=s.value?document.activeElement:void 0}),G(()=>{window.addEventListener("keyup",n)}),de(()=>{window.removeEventListener("keyup",n)});function n(o){o.key==="Escape"&&s.value&&(e(),t==null||t.focus())}}const Ie=M(R?location.hash:"");R&&window.addEventListener("hashchange",()=>{Ie.value=location.hash});function ft(s){const{page:e}=P(),t=M(!1),n=k(()=>s.value.collapsed!=null),o=k(()=>!!s.value.link),r=M(!1),d=()=>{r.value=O(e.value.relativePath,s.value.link)};U([e,s,Ie],d),G(d);const p=k(()=>r.value?!0:s.value.items?ie(e.value.relativePath,s.value.items):!1),_=k(()=>!!(s.value.items&&s.value.items.length));te(()=>{t.value=!!(n.value&&s.value.collapsed)}),Ve(()=>{(r.value||p.value)&&(t.value=!1)});function g(){n.value&&(t.value=!t.value)}return{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:p,hasChildren:_,toggle:g}}function mt(){const{hasSidebar:s}=D(),e=re("(min-width: 960px)"),t=re("(min-width: 1280px)");return{isAsideEnabled:k(()=>!t.value&&!e.value?!1:s.value?t.value:e.value)}}const gt=71;function ve(s){return typeof s.outline=="object"&&!Array.isArray(s.outline)&&s.outline.label||s.outlineTitle||"On this page"}function pe(s){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const n=Number(t.tagName[1]);return{title:bt(t),link:"#"+t.id,level:n}});return $t(e,s)}function bt(s){let e="";for(const t of s.childNodes)if(t.nodeType===1){if(t.classList.contains("VPBadge")||t.classList.contains("header-anchor"))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function $t(s,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[n,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;s=s.filter(d=>d.level>=n&&d.level<=o);const r=[];e:for(let d=0;d=0;_--){const g=s[_];if(g.level{requestAnimationFrame(r),window.addEventListener("scroll",n)}),Ee(()=>{d(location.hash)}),de(()=>{window.removeEventListener("scroll",n)});function r(){if(!t.value)return;const p=[].slice.call(s.value.querySelectorAll(".outline-link")),_=[].slice.call(document.querySelectorAll(".content .header-anchor")).filter(S=>p.some(C=>C.hash===S.hash&&S.offsetParent!==null)),g=window.scrollY,V=window.innerHeight,y=document.body.offsetHeight,I=Math.abs(g+V-y)<1;if(_.length&&I){d(_[_.length-1].hash);return}for(let S=0;S<_.length;S++){const C=_[S],B=_[S+1],[w,K]=yt(S,C,B);if(w){d(K);return}}}function d(p){o&&o.classList.remove("active"),p==null?o=null:o=s.value.querySelector(`a[href="${decodeURIComponent(p)}"]`);const _=o;_?(_.classList.add("active"),e.value.style.top=_.offsetTop+33+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function ye(s){return s.parentElement.offsetTop-gt}function yt(s,e,t){const n=window.scrollY;return s===0&&n===0?[!0,null]:n{const o=j("VPDocOutlineItem",!0);return a(),i("ul",{class:T(t.root?"root":"nested")},[(a(!0),i(N,null,A(t.headers,({children:r,link:d,title:p})=>(a(),i("li",null,[c("a",{class:"outline-link",href:d,onClick:e,title:p},L(p),9,Pt),r!=null&&r.length?(a(),$(o,{key:0,headers:r},null,8,["headers"])):f("",!0)]))),256))],2)}}});const he=m(Vt,[["__scopeId","data-v-fc1e6dbb"]]),wt=s=>(H("data-v-e7b248a1"),s=s(),z(),s),Lt={class:"content"},St={class:"outline-title",role:"heading","aria-level":"2"},Mt={"aria-labelledby":"doc-outline-aria-label"},Nt=wt(()=>c("span",{class:"visually-hidden",id:"doc-outline-aria-label"}," Table of Contents for current page ",-1)),It=b({__name:"VPDocAsideOutline",setup(s){const{frontmatter:e,theme:t}=P(),n=_e([]);Y(()=>{n.value=pe(e.value.outline??t.value.outline)});const o=M(),r=M();return kt(o,r),(d,p)=>(a(),i("div",{class:T(["VPDocAsideOutline",{"has-outline":n.value.length>0}]),ref_key:"container",ref:o,role:"navigation"},[c("div",Lt,[c("div",{class:"outline-marker",ref_key:"marker",ref:r},null,512),c("div",St,L(l(ve)(l(t))),1),c("nav",Mt,[Nt,h(he,{headers:n.value,root:!0},null,8,["headers"])])])],2))}});const Tt=m(It,[["__scopeId","data-v-e7b248a1"]]),Ct={class:"VPDocAsideCarbonAds"},Bt=b({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(s){const e=()=>null;return(t,n)=>(a(),i("div",Ct,[h(l(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),At=s=>(H("data-v-470b544e"),s=s(),z(),s),xt={class:"VPDocAside"},Ht=At(()=>c("div",{class:"spacer"},null,-1)),zt=b({__name:"VPDocAside",setup(s){const{theme:e}=P();return(t,n)=>(a(),i("div",xt,[u(t.$slots,"aside-top",{},void 0,!0),u(t.$slots,"aside-outline-before",{},void 0,!0),h(Tt),u(t.$slots,"aside-outline-after",{},void 0,!0),Ht,u(t.$slots,"aside-ads-before",{},void 0,!0),l(e).carbonAds?(a(),$(Bt,{key:0,"carbon-ads":l(e).carbonAds},null,8,["carbon-ads"])):f("",!0),u(t.$slots,"aside-ads-after",{},void 0,!0),u(t.$slots,"aside-bottom",{},void 0,!0)]))}});const Dt=m(zt,[["__scopeId","data-v-470b544e"]]);function Et(){const{theme:s,page:e}=P();return k(()=>{const{text:t="Edit this page",pattern:n=""}=s.value.editLink||{};let o;return typeof n=="function"?o=n(e.value):o=n.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function Ft(){const{page:s,theme:e,frontmatter:t}=P();return k(()=>{var _,g,V,y,I,S,C,B;const n=Ne(e.value.sidebar,s.value.relativePath),o=pt(n),r=o.findIndex(w=>O(s.value.relativePath,w.link)),d=((_=e.value.docFooter)==null?void 0:_.prev)===!1&&!t.value.prev||t.value.prev===!1,p=((g=e.value.docFooter)==null?void 0:g.next)===!1&&!t.value.next||t.value.next===!1;return{prev:d?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((V=o[r-1])==null?void 0:V.docFooterText)??((y=o[r-1])==null?void 0:y.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((I=o[r-1])==null?void 0:I.link)},next:p?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??((S=o[r+1])==null?void 0:S.docFooterText)??((C=o[r+1])==null?void 0:C.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((B=o[r+1])==null?void 0:B.link)}}})}const Ot={},Gt={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Ut=c("path",{d:"M18,23H4c-1.7,0-3-1.3-3-3V6c0-1.7,1.3-3,3-3h7c0.6,0,1,0.4,1,1s-0.4,1-1,1H4C3.4,5,3,5.4,3,6v14c0,0.6,0.4,1,1,1h14c0.6,0,1-0.4,1-1v-7c0-0.6,0.4-1,1-1s1,0.4,1,1v7C21,21.7,19.7,23,18,23z"},null,-1),jt=c("path",{d:"M8,17c-0.3,0-0.5-0.1-0.7-0.3C7,16.5,6.9,16.1,7,15.8l1-4c0-0.2,0.1-0.3,0.3-0.5l9.5-9.5c1.2-1.2,3.2-1.2,4.4,0c1.2,1.2,1.2,3.2,0,4.4l-9.5,9.5c-0.1,0.1-0.3,0.2-0.5,0.3l-4,1C8.2,17,8.1,17,8,17zM9.9,12.5l-0.5,2.1l2.1-0.5l9.3-9.3c0.4-0.4,0.4-1.1,0-1.6c-0.4-0.4-1.2-0.4-1.6,0l0,0L9.9,12.5z M18.5,2.5L18.5,2.5L18.5,2.5z"},null,-1),Kt=[Ut,jt];function qt(s,e){return a(),i("svg",Gt,Kt)}const Rt=m(Ot,[["render",qt]]),E=b({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(s){const e=s,t=k(()=>e.tag??(e.href?"a":"span")),n=k(()=>e.href&&we.test(e.href));return(o,r)=>(a(),$(F(t.value),{class:T(["VPLink",{link:o.href,"vp-external-link-icon":n.value,"no-icon":o.noIcon}]),href:o.href?l(J)(o.href):void 0,target:o.target??(n.value?"_blank":void 0),rel:o.rel??(n.value?"noreferrer":void 0)},{default:v(()=>[u(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),Wt={class:"VPLastUpdated"},Yt=["datetime"],Jt=b({__name:"VPDocFooterLastUpdated",setup(s){const{theme:e,page:t,frontmatter:n,lang:o}=P(),r=k(()=>new Date(n.value.lastUpdated??t.value.lastUpdated)),d=k(()=>r.value.toISOString()),p=M("");return G(()=>{te(()=>{var _,g,V;p.value=new Intl.DateTimeFormat((g=(_=e.value.lastUpdated)==null?void 0:_.formatOptions)!=null&&g.forceLocale?o.value:void 0,((V=e.value.lastUpdated)==null?void 0:V.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(r.value)})}),(_,g)=>{var V;return a(),i("p",Wt,[x(L(((V=l(e).lastUpdated)==null?void 0:V.text)||l(e).lastUpdatedText||"Last updated")+": ",1),c("time",{datetime:d.value},L(p.value),9,Yt)])}}});const Xt=m(Jt,[["__scopeId","data-v-112a886d"]]),Zt={key:0,class:"VPDocFooter"},Qt={key:0,class:"edit-info"},es={key:0,class:"edit-link"},ts={key:1,class:"last-updated"},ss={key:1,class:"prev-next"},ns={class:"pager"},os=["href"],as=["innerHTML"],rs=["innerHTML"],ls={class:"pager"},is=["href"],cs=["innerHTML"],us=["innerHTML"],ds=b({__name:"VPDocFooter",setup(s){const{theme:e,page:t,frontmatter:n}=P(),o=Et(),r=Ft(),d=k(()=>e.value.editLink&&n.value.editLink!==!1),p=k(()=>t.value.lastUpdated&&n.value.lastUpdated!==!1),_=k(()=>d.value||p.value||r.value.prev||r.value.next);return(g,V)=>{var y,I,S,C,B,w;return _.value?(a(),i("footer",Zt,[u(g.$slots,"doc-footer-before",{},void 0,!0),d.value||p.value?(a(),i("div",Qt,[d.value?(a(),i("div",es,[h(E,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:v(()=>[h(Rt,{class:"edit-link-icon","aria-label":"edit icon"}),x(" "+L(l(o).text),1)]),_:1},8,["href"])])):f("",!0),p.value?(a(),i("div",ts,[h(Xt)])):f("",!0)])):f("",!0),(y=l(r).prev)!=null&&y.link||(I=l(r).next)!=null&&I.link?(a(),i("nav",ss,[c("div",ns,[(S=l(r).prev)!=null&&S.link?(a(),i("a",{key:0,class:"pager-link prev",href:l(J)(l(r).prev.link)},[c("span",{class:"desc",innerHTML:((C=l(e).docFooter)==null?void 0:C.prev)||"Previous page"},null,8,as),c("span",{class:"title",innerHTML:l(r).prev.text},null,8,rs)],8,os)):f("",!0)]),c("div",ls,[(B=l(r).next)!=null&&B.link?(a(),i("a",{key:0,class:"pager-link next",href:l(J)(l(r).next.link)},[c("span",{class:"desc",innerHTML:((w=l(e).docFooter)==null?void 0:w.next)||"Next page"},null,8,cs),c("span",{class:"title",innerHTML:l(r).next.text},null,8,us)],8,is)):f("",!0)])])):f("",!0)])):f("",!0)}}});const _s=m(ds,[["__scopeId","data-v-6f497cd4"]]),vs={},ps={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},hs=c("path",{d:"M9,19c-0.3,0-0.5-0.1-0.7-0.3c-0.4-0.4-0.4-1,0-1.4l5.3-5.3L8.3,6.7c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l6,6c0.4,0.4,0.4,1,0,1.4l-6,6C9.5,18.9,9.3,19,9,19z"},null,-1),fs=[hs];function ms(s,e){return a(),i("svg",ps,fs)}const fe=m(vs,[["render",ms]]),gs={key:0,class:"VPDocOutlineDropdown"},bs={key:0,class:"items"},$s=b({__name:"VPDocOutlineDropdown",setup(s){const{frontmatter:e,theme:t}=P(),n=M(!1);Y(()=>{n.value=!1});const o=_e([]);return Y(()=>{o.value=pe(e.value.outline??t.value.outline)}),(r,d)=>o.value.length>0?(a(),i("div",gs,[c("button",{onClick:d[0]||(d[0]=p=>n.value=!n.value),class:T({open:n.value})},[x(L(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2),n.value?(a(),i("div",bs,[h(he,{headers:o.value},null,8,["headers"])])):f("",!0)])):f("",!0)}});const ks=m($s,[["__scopeId","data-v-5d13abc5"]]),ys=s=>(H("data-v-80010f0c"),s=s(),z(),s),Ps={class:"container"},Vs=ys(()=>c("div",{class:"aside-curtain"},null,-1)),ws={class:"aside-container"},Ls={class:"aside-content"},Ss={class:"content"},Ms={class:"content-container"},Ns={class:"main"},Is=b({__name:"VPDoc",setup(s){const{theme:e}=P(),t=se(),{hasSidebar:n,hasAside:o,leftAside:r}=D(),d=k(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(p,_)=>{const g=j("Content");return a(),i("div",{class:T(["VPDoc",{"has-sidebar":l(n),"has-aside":l(o)}])},[u(p.$slots,"doc-top",{},void 0,!0),c("div",Ps,[l(o)?(a(),i("div",{key:0,class:T(["aside",{"left-aside":l(r)}])},[Vs,c("div",ws,[c("div",Ls,[h(Dt,null,{"aside-top":v(()=>[u(p.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(p.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(p.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(p.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(p.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(p.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):f("",!0),c("div",Ss,[c("div",Ms,[u(p.$slots,"doc-before",{},void 0,!0),h(ks),c("main",Ns,[h(g,{class:T(["vp-doc",[d.value,l(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),h(_s,null,{"doc-footer-before":v(()=>[u(p.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),u(p.$slots,"doc-after",{},void 0,!0)])])]),u(p.$slots,"doc-bottom",{},void 0,!0)],2)}}});const Ts=m(Is,[["__scopeId","data-v-80010f0c"]]),Cs=b({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{}},setup(s){const e=s,t=k(()=>e.href&&we.test(e.href)),n=k(()=>e.tag||e.href?"a":"button");return(o,r)=>(a(),$(F(n.value),{class:T(["VPButton",[o.size,o.theme]]),href:o.href?l(J)(o.href):void 0,target:t.value?"_blank":void 0,rel:t.value?"noreferrer":void 0},{default:v(()=>[x(L(o.text),1)]),_:1},8,["class","href","target","rel"]))}});const Bs=m(Cs,[["__scopeId","data-v-c2d0dde3"]]),As=["src","alt"],xs=b({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(s){return(e,t)=>{const n=j("VPImage",!0);return e.image?(a(),i(N,{key:0},[typeof e.image=="string"||"src"in e.image?(a(),i("img",Z({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:l(ue)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,As)):(a(),i(N,{key:1},[h(n,Z({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),h(n,Z({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):f("",!0)}}});const ee=m(xs,[["__scopeId","data-v-6b741c7d"]]),Hs=s=>(H("data-v-95b00d9a"),s=s(),z(),s),zs={class:"container"},Ds={class:"main"},Es={key:0,class:"name"},Fs=["innerHTML"],Os=["innerHTML"],Gs=["innerHTML"],Us={key:0,class:"actions"},js={key:0,class:"image"},Ks={class:"image-container"},qs=Hs(()=>c("div",{class:"image-bg"},null,-1)),Rs=b({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(s){const e=ne("hero-image-slot-exists");return(t,n)=>(a(),i("div",{class:T(["VPHero",{"has-image":t.image||l(e)}])},[c("div",zs,[c("div",Ds,[u(t.$slots,"home-hero-info",{},()=>[t.name?(a(),i("h1",Es,[c("span",{innerHTML:t.name,class:"clip"},null,8,Fs)])):f("",!0),t.text?(a(),i("p",{key:1,innerHTML:t.text,class:"text"},null,8,Os)):f("",!0),t.tagline?(a(),i("p",{key:2,innerHTML:t.tagline,class:"tagline"},null,8,Gs)):f("",!0)],!0),t.actions?(a(),i("div",Us,[(a(!0),i(N,null,A(t.actions,o=>(a(),i("div",{key:o.link,class:"action"},[h(Bs,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link},null,8,["theme","text","href"])]))),128))])):f("",!0)]),t.image||l(e)?(a(),i("div",js,[c("div",Ks,[qs,u(t.$slots,"home-hero-image",{},()=>[t.image?(a(),$(ee,{key:0,class:"image-src",image:t.image},null,8,["image"])):f("",!0)],!0)])])):f("",!0)])],2))}});const Ws=m(Rs,[["__scopeId","data-v-95b00d9a"]]),Ys=b({__name:"VPHomeHero",setup(s){const{frontmatter:e}=P();return(t,n)=>l(e).hero?(a(),$(Ws,{key:0,class:"VPHomeHero",name:l(e).hero.name,text:l(e).hero.text,tagline:l(e).hero.tagline,image:l(e).hero.image,actions:l(e).hero.actions},{"home-hero-info":v(()=>[u(t.$slots,"home-hero-info")]),"home-hero-image":v(()=>[u(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):f("",!0)}}),Js={},Xs={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24"},Zs=c("path",{d:"M19.9,12.4c0.1-0.2,0.1-0.5,0-0.8c-0.1-0.1-0.1-0.2-0.2-0.3l-7-7c-0.4-0.4-1-0.4-1.4,0s-0.4,1,0,1.4l5.3,5.3H5c-0.6,0-1,0.4-1,1s0.4,1,1,1h11.6l-5.3,5.3c-0.4,0.4-0.4,1,0,1.4c0.2,0.2,0.5,0.3,0.7,0.3s0.5-0.1,0.7-0.3l7-7C19.8,12.6,19.9,12.5,19.9,12.4z"},null,-1),Qs=[Zs];function en(s,e){return a(),i("svg",Xs,Qs)}const tn=m(Js,[["render",en]]),sn={class:"box"},nn={key:0,class:"icon"},on=["innerHTML"],an=["innerHTML"],rn=["innerHTML"],ln={key:4,class:"link-text"},cn={class:"link-text-value"},un=b({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(s){return(e,t)=>(a(),$(E,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:v(()=>[c("article",sn,[typeof e.icon=="object"&&e.icon.wrap?(a(),i("div",nn,[h(ee,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(a(),$(ee,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(a(),i("div",{key:2,class:"icon",innerHTML:e.icon},null,8,on)):f("",!0),c("h2",{class:"title",innerHTML:e.title},null,8,an),e.details?(a(),i("p",{key:3,class:"details",innerHTML:e.details},null,8,rn)):f("",!0),e.linkText?(a(),i("div",ln,[c("p",cn,[x(L(e.linkText)+" ",1),h(tn,{class:"link-text-icon"})])])):f("",!0)])]),_:1},8,["href","rel","target","tag"]))}});const dn=m(un,[["__scopeId","data-v-5c6842f0"]]),_n={key:0,class:"VPFeatures"},vn={class:"container"},pn={class:"items"},hn=b({__name:"VPFeatures",props:{features:{}},setup(s){const e=s,t=k(()=>{const n=e.features.length;if(n){if(n===2)return"grid-2";if(n===3)return"grid-3";if(n%3===0)return"grid-6";if(n>3)return"grid-4"}else return});return(n,o)=>n.features?(a(),i("div",_n,[c("div",vn,[c("div",pn,[(a(!0),i(N,null,A(n.features,r=>(a(),i("div",{key:r.title,class:T(["item",[t.value]])},[h(dn,{icon:r.icon,title:r.title,details:r.details,link:r.link,"link-text":r.linkText,rel:r.rel,target:r.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):f("",!0)}});const fn=m(hn,[["__scopeId","data-v-179bf1de"]]),mn=b({__name:"VPHomeFeatures",setup(s){const{frontmatter:e}=P();return(t,n)=>l(e).features?(a(),$(fn,{key:0,class:"VPHomeFeatures",features:l(e).features},null,8,["features"])):f("",!0)}}),gn={class:"VPHome"},bn=b({__name:"VPHome",setup(s){return(e,t)=>{const n=j("Content");return a(),i("div",gn,[u(e.$slots,"home-hero-before",{},void 0,!0),h(Ys,null,{"home-hero-info":v(()=>[u(e.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(e.$slots,"home-hero-image",{},void 0,!0)]),_:3}),u(e.$slots,"home-hero-after",{},void 0,!0),u(e.$slots,"home-features-before",{},void 0,!0),h(mn),u(e.$slots,"home-features-after",{},void 0,!0),h(n)])}}});const $n=m(bn,[["__scopeId","data-v-4206cc72"]]),kn={},yn={class:"VPPage"};function Pn(s,e){const t=j("Content");return a(),i("div",yn,[u(s.$slots,"page-top"),h(t),u(s.$slots,"page-bottom")])}const Vn=m(kn,[["render",Pn]]),wn=b({__name:"VPContent",setup(s){const{page:e,frontmatter:t}=P(),{hasSidebar:n}=D();return(o,r)=>(a(),i("div",{class:T(["VPContent",{"has-sidebar":l(n),"is-home":l(t).layout==="home"}]),id:"VPContent"},[l(e).isNotFound?u(o.$slots,"not-found",{key:0},()=>[h(_t)],!0):l(t).layout==="page"?(a(),$(Vn,{key:1},{"page-top":v(()=>[u(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(t).layout==="home"?(a(),$($n,{key:2},{"home-hero-before":v(()=>[u(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(t).layout&&l(t).layout!=="doc"?(a(),$(F(l(t).layout),{key:3})):(a(),$(Ts,{key:4},{"doc-top":v(()=>[u(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":v(()=>[u(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":v(()=>[u(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":v(()=>[u(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":v(()=>[u(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}});const Ln=m(wn,[["__scopeId","data-v-88f69216"]]),Sn={class:"container"},Mn=["innerHTML"],Nn=["innerHTML"],In=b({__name:"VPFooter",setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=D();return(o,r)=>l(e).footer&&l(t).footer!==!1?(a(),i("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(n)}])},[c("div",Sn,[l(e).footer.message?(a(),i("p",{key:0,class:"message",innerHTML:l(e).footer.message},null,8,Mn)):f("",!0),l(e).footer.copyright?(a(),i("p",{key:1,class:"copyright",innerHTML:l(e).footer.copyright},null,8,Nn)):f("",!0)])],2)):f("",!0)}});const Tn=m(In,[["__scopeId","data-v-489d7418"]]),Cn={class:"header"},Bn={class:"outline"},An=b({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(s){const e=s,{theme:t}=P(),n=M(!1),o=M(0),r=M();Y(()=>{n.value=!1});function d(){n.value=!n.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function p(g){g.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Oe(()=>{n.value=!1}))}function _(){n.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(g,V)=>(a(),i("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"})},[g.headers.length>0?(a(),i("button",{key:0,onClick:d,class:T({open:n.value})},[x(L(l(ve)(l(t)))+" ",1),h(fe,{class:"icon"})],2)):(a(),i("button",{key:1,onClick:_},L(l(t).returnToTopLabel||"Return to top"),1)),h(ce,{name:"flyout"},{default:v(()=>[n.value?(a(),i("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:p},[c("div",Cn,[c("a",{class:"top-link",href:"#",onClick:_},L(l(t).returnToTopLabel||"Return to top"),1)]),c("div",Bn,[h(he,{headers:g.headers},null,8,["headers"])])],512)):f("",!0)]),_:1})],4))}});const xn=m(An,[["__scopeId","data-v-746b8b3e"]]),Hn={},zn={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Dn=c("path",{d:"M17,11H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,11,17,11z"},null,-1),En=c("path",{d:"M21,7H3C2.4,7,2,6.6,2,6s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,7,21,7z"},null,-1),Fn=c("path",{d:"M21,15H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h18c0.6,0,1,0.4,1,1S21.6,15,21,15z"},null,-1),On=c("path",{d:"M17,19H3c-0.6,0-1-0.4-1-1s0.4-1,1-1h14c0.6,0,1,0.4,1,1S17.6,19,17,19z"},null,-1),Gn=[Dn,En,Fn,On];function Un(s,e){return a(),i("svg",zn,Gn)}const jn=m(Hn,[["render",Un]]),Kn=["aria-expanded"],qn={class:"menu-text"},Rn=b({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(s){const{theme:e,frontmatter:t}=P(),{hasSidebar:n}=D(),{y:o}=Le(),r=_e([]),d=M(0);G(()=>{d.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),Y(()=>{r.value=pe(t.value.outline??e.value.outline)});const p=k(()=>r.value.length===0&&!n.value),_=k(()=>({VPLocalNav:!0,fixed:p.value,"reached-top":o.value>=d.value}));return(g,V)=>l(t).layout!=="home"&&(!p.value||l(o)>=d.value)?(a(),i("div",{key:0,class:T(_.value)},[l(n)?(a(),i("button",{key:0,class:"menu","aria-expanded":g.open,"aria-controls":"VPSidebarNav",onClick:V[0]||(V[0]=y=>g.$emit("open-menu"))},[h(jn,{class:"menu-icon"}),c("span",qn,L(l(e).sidebarMenuLabel||"Menu"),1)],8,Kn)):f("",!0),h(xn,{headers:r.value,navHeight:d.value},null,8,["headers","navHeight"])],2)):f("",!0)}});const Wn=m(Rn,[["__scopeId","data-v-41aecf3b"]]);function Yn(){const s=M(!1);function e(){s.value=!0,window.addEventListener("resize",o)}function t(){s.value=!1,window.removeEventListener("resize",o)}function n(){s.value?t():e()}function o(){window.outerWidth>=768&&t()}const r=se();return U(()=>r.path,t),{isScreenOpen:s,openScreen:e,closeScreen:t,toggleScreen:n}}const Jn={},Xn={class:"VPSwitch",type:"button",role:"switch"},Zn={class:"check"},Qn={key:0,class:"icon"};function eo(s,e){return a(),i("button",Xn,[c("span",Zn,[s.$slots.default?(a(),i("span",Qn,[u(s.$slots,"default",{},void 0,!0)])):f("",!0)])])}const to=m(Jn,[["render",eo],["__scopeId","data-v-55c70256"]]),so={},no={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},oo=c("path",{d:"M12.1,22c-0.3,0-0.6,0-0.9,0c-5.5-0.5-9.5-5.4-9-10.9c0.4-4.8,4.2-8.6,9-9c0.4,0,0.8,0.2,1,0.5c0.2,0.3,0.2,0.8-0.1,1.1c-2,2.7-1.4,6.4,1.3,8.4c2.1,1.6,5,1.6,7.1,0c0.3-0.2,0.7-0.3,1.1-0.1c0.3,0.2,0.5,0.6,0.5,1c-0.2,2.7-1.5,5.1-3.6,6.8C16.6,21.2,14.4,22,12.1,22zM9.3,4.4c-2.9,1-5,3.6-5.2,6.8c-0.4,4.4,2.8,8.3,7.2,8.7c2.1,0.2,4.2-0.4,5.8-1.8c1.1-0.9,1.9-2.1,2.4-3.4c-2.5,0.9-5.3,0.5-7.5-1.1C9.2,11.4,8.1,7.7,9.3,4.4z"},null,-1),ao=[oo];function ro(s,e){return a(),i("svg",no,ao)}const lo=m(so,[["render",ro]]),io={},co={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},uo=Ge('',9),_o=[uo];function vo(s,e){return a(),i("svg",co,_o)}const po=m(io,[["render",vo]]),ho=b({__name:"VPSwitchAppearance",setup(s){const{isDark:e}=P(),t=ne("toggle-appearance",()=>{e.value=!e.value});return(n,o)=>(a(),$(to,{title:"toggle dark mode",class:"VPSwitchAppearance","aria-checked":l(e),onClick:l(t)},{default:v(()=>[h(po,{class:"sun"}),h(lo,{class:"moon"})]),_:1},8,["aria-checked","onClick"]))}});const me=m(ho,[["__scopeId","data-v-f9719704"]]),fo={key:0,class:"VPNavBarAppearance"},mo=b({__name:"VPNavBarAppearance",setup(s){const{site:e}=P();return(t,n)=>l(e).appearance&&l(e).appearance!=="force-dark"?(a(),i("div",fo,[h(me)])):f("",!0)}});const go=m(mo,[["__scopeId","data-v-e9d6c9ee"]]),ge=M();let Te=!1,ae=0;function bo(s){const e=M(!1);if(R){!Te&&$o(),ae++;const t=U(ge,n=>{var o,r,d;n===s.el.value||(o=s.el.value)!=null&&o.contains(n)?(e.value=!0,(r=s.onFocus)==null||r.call(s)):(e.value=!1,(d=s.onBlur)==null||d.call(s))});de(()=>{t(),ae--,ae||ko()})}return Ue(e)}function $o(){document.addEventListener("focusin",Ce),Te=!0,ge.value=document.activeElement}function ko(){document.removeEventListener("focusin",Ce)}function Ce(){ge.value=document.activeElement}const yo={},Po={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},Vo=c("path",{d:"M12,16c-0.3,0-0.5-0.1-0.7-0.3l-6-6c-0.4-0.4-0.4-1,0-1.4s1-0.4,1.4,0l5.3,5.3l5.3-5.3c0.4-0.4,1-0.4,1.4,0s0.4,1,0,1.4l-6,6C12.5,15.9,12.3,16,12,16z"},null,-1),wo=[Vo];function Lo(s,e){return a(),i("svg",Po,wo)}const Be=m(yo,[["render",Lo]]),So={},Mo={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},No=c("circle",{cx:"12",cy:"12",r:"2"},null,-1),Io=c("circle",{cx:"19",cy:"12",r:"2"},null,-1),To=c("circle",{cx:"5",cy:"12",r:"2"},null,-1),Co=[No,Io,To];function Bo(s,e){return a(),i("svg",Mo,Co)}const Ao=m(So,[["render",Bo]]),xo={class:"VPMenuLink"},Ho=b({__name:"VPMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,n)=>(a(),i("div",xo,[h(E,{class:T({active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["class","href","target","rel"])]))}});const oe=m(Ho,[["__scopeId","data-v-94a0caeb"]]),zo={class:"VPMenuGroup"},Do={key:0,class:"title"},Eo=b({__name:"VPMenuGroup",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",zo,[e.text?(a(),i("p",Do,L(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),i(N,null,["link"in n?(a(),$(oe,{key:0,item:n},null,8,["item"])):f("",!0)],64))),256))]))}});const Fo=m(Eo,[["__scopeId","data-v-6ab6a63a"]]),Oo={class:"VPMenu"},Go={key:0,class:"items"},Uo=b({__name:"VPMenu",props:{items:{}},setup(s){return(e,t)=>(a(),i("div",Oo,[e.items?(a(),i("div",Go,[(a(!0),i(N,null,A(e.items,n=>(a(),i(N,{key:n.text},["link"in n?(a(),$(oe,{key:0,item:n},null,8,["item"])):(a(),$(Fo,{key:1,text:n.text,items:n.items},null,8,["text","items"]))],64))),128))])):f("",!0),u(e.$slots,"default",{},void 0,!0)]))}});const jo=m(Uo,[["__scopeId","data-v-8148ee14"]]),Ko=["aria-expanded","aria-label"],qo={key:0,class:"text"},Ro=["innerHTML"],Wo={class:"menu"},Yo=b({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(s){const e=M(!1),t=M();bo({el:t,onBlur:n});function n(){e.value=!1}return(o,r)=>(a(),i("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:r[1]||(r[1]=d=>e.value=!0),onMouseleave:r[2]||(r[2]=d=>e.value=!1)},[c("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:r[0]||(r[0]=d=>e.value=!e.value)},[o.button||o.icon?(a(),i("span",qo,[o.icon?(a(),$(F(o.icon),{key:0,class:"option-icon"})):f("",!0),o.button?(a(),i("span",{key:1,innerHTML:o.button},null,8,Ro)):f("",!0),h(Be,{class:"text-icon"})])):(a(),$(Ao,{key:1,class:"icon"}))],8,Ko),c("div",Wo,[h(jo,{items:o.items},{default:v(()=>[u(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}});const be=m(Yo,[["__scopeId","data-v-2e639d93"]]),Jo={discord:'Discord',facebook:'Facebook',github:'GitHub',instagram:'Instagram',linkedin:'LinkedIn',mastodon:'Mastodon',slack:'Slack',twitter:'Twitter',x:'X',youtube:'YouTube'},Xo=["href","aria-label","innerHTML"],Zo=b({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(s){const e=s,t=k(()=>typeof e.icon=="object"?e.icon.svg:Jo[e.icon]);return(n,o)=>(a(),i("a",{class:"VPSocialLink no-icon",href:n.link,"aria-label":n.ariaLabel??(typeof n.icon=="string"?n.icon:""),target:"_blank",rel:"noopener",innerHTML:t.value},null,8,Xo))}});const Qo=m(Zo,[["__scopeId","data-v-c8ada7f5"]]),ea={class:"VPSocialLinks"},ta=b({__name:"VPSocialLinks",props:{links:{}},setup(s){return(e,t)=>(a(),i("div",ea,[(a(!0),i(N,null,A(e.links,({link:n,icon:o,ariaLabel:r})=>(a(),$(Qo,{key:n,icon:o,link:n,ariaLabel:r},null,8,["icon","link","ariaLabel"]))),128))]))}});const $e=m(ta,[["__scopeId","data-v-1663f158"]]),sa={key:0,class:"group translations"},na={class:"trans-title"},oa={key:1,class:"group"},aa={class:"item appearance"},ra={class:"label"},la={class:"appearance-action"},ia={key:2,class:"group"},ca={class:"item social-links"},ua=b({__name:"VPNavBarExtra",setup(s){const{site:e,theme:t}=P(),{localeLinks:n,currentLang:o}=X({correspondingLink:!0}),r=k(()=>n.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(d,p)=>r.value?(a(),$(be,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:v(()=>[l(n).length&&l(o).label?(a(),i("div",sa,[c("p",na,L(l(o).label),1),(a(!0),i(N,null,A(l(n),_=>(a(),$(oe,{key:_.link,item:_},null,8,["item"]))),128))])):f("",!0),l(e).appearance?(a(),i("div",oa,[c("div",aa,[c("p",ra,L(l(t).darkModeSwitchLabel||"Appearance"),1),c("div",la,[h(me)])])])):f("",!0),l(t).socialLinks?(a(),i("div",ia,[c("div",ca,[h($e,{class:"social-links-list",links:l(t).socialLinks},null,8,["links"])])])):f("",!0)]),_:1})):f("",!0)}});const da=m(ua,[["__scopeId","data-v-3abe5206"]]),_a=s=>(H("data-v-a5b09a9d"),s=s(),z(),s),va=["aria-expanded"],pa=_a(()=>c("span",{class:"container"},[c("span",{class:"top"}),c("span",{class:"middle"}),c("span",{class:"bottom"})],-1)),ha=[pa],fa=b({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(s){return(e,t)=>(a(),i("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=n=>e.$emit("click"))},ha,10,va))}});const ma=m(fa,[["__scopeId","data-v-a5b09a9d"]]),ga=["innerHTML"],ba=b({__name:"VPNavBarMenuLink",props:{item:{}},setup(s){const{page:e}=P();return(t,n)=>(a(),$(E,{class:T({VPNavBarMenuLink:!0,active:l(O)(l(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,tabindex:"0"},{default:v(()=>[c("span",{innerHTML:t.item.text},null,8,ga)]),_:1},8,["class","href","target","rel"]))}});const $a=m(ba,[["__scopeId","data-v-f5e86147"]]),ka=b({__name:"VPNavBarMenuGroup",props:{item:{}},setup(s){const e=s,{page:t}=P(),n=r=>"link"in r?O(t.value.relativePath,r.link,!!e.item.activeMatch):r.items.some(n),o=k(()=>n(e.item));return(r,d)=>(a(),$(be,{class:T({VPNavBarMenuGroup:!0,active:l(O)(l(t).relativePath,r.item.activeMatch,!!r.item.activeMatch)||o.value}),button:r.item.text,items:r.item.items},null,8,["class","button","items"]))}}),ya=s=>(H("data-v-39a6d6d3"),s=s(),z(),s),Pa={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Va=ya(()=>c("span",{id:"main-nav-aria-label",class:"visually-hidden"},"Main Navigation",-1)),wa=b({__name:"VPNavBarMenu",setup(s){const{theme:e}=P();return(t,n)=>l(e).nav?(a(),i("nav",Pa,[Va,(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),$($a,{key:0,item:o},null,8,["item"])):(a(),$(ka,{key:1,item:o},null,8,["item"]))],64))),128))])):f("",!0)}});const La=m(wa,[["__scopeId","data-v-39a6d6d3"]]);function Sa(s,e){const{localeIndex:t}=P();function n(o){var S,C;const r=o.split("."),d=s&&typeof s=="object",p=d&&((C=(S=s.locales)==null?void 0:S[t.value])==null?void 0:C.translations)||null,_=d&&s.translations||null;let g=p,V=_,y=e;const I=r.pop();for(const B of r){let w=null;const K=y==null?void 0:y[B];K&&(w=y=K);const W=V==null?void 0:V[B];W&&(w=V=W);const q=g==null?void 0:g[B];q&&(w=g=q),K||(y=w),W||(V=w),q||(g=w)}return(g==null?void 0:g[I])??(V==null?void 0:V[I])??(y==null?void 0:y[I])??""}return n}const Ma=["aria-label"],Na={class:"DocSearch-Button-Container"},Ia=c("svg",{class:"DocSearch-Search-Icon",width:"20",height:"20",viewBox:"0 0 20 20","aria-label":"search icon"},[c("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1),Ta={class:"DocSearch-Button-Placeholder"},Ca=c("span",{class:"DocSearch-Button-Keys"},[c("kbd",{class:"DocSearch-Button-Key"}),c("kbd",{class:"DocSearch-Button-Key"},"K")],-1),Pe=b({__name:"VPNavBarSearchButton",setup(s){var o;const{theme:e}=P(),t={button:{buttonText:"Search",buttonAriaLabel:"Search"}},n=Sa((o=e.value.search)==null?void 0:o.options,t);return(r,d)=>(a(),i("button",{type:"button",class:"DocSearch DocSearch-Button","aria-label":l(n)("button.buttonAriaLabel")},[c("span",Na,[Ia,c("span",Ta,L(l(n)("button.buttonText")),1)]),Ca],8,Ma))}});const Ba={class:"VPNavBarSearch"},Aa={id:"local-search"},xa={key:1,id:"docsearch"},Ha=b({__name:"VPNavBarSearch",setup(s){const e=je(()=>Ke(()=>import("./VPLocalSearchBox.731f09d8.js"),["assets/chunks/VPLocalSearchBox.731f09d8.js","assets/chunks/framework.e1e0b12f.js"])),t=()=>null,{theme:n}=P(),o=M(!1),r=M(!1);G(()=>{});function d(){o.value||(o.value=!0,setTimeout(p,16))}function p(){const y=new Event("keydown");y.key="k",y.metaKey=!0,window.dispatchEvent(y),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||p()},16)}function _(y){const I=y.target,S=I.tagName;return I.isContentEditable||S==="INPUT"||S==="SELECT"||S==="TEXTAREA"}const g=M(!1);ke("k",y=>{(y.ctrlKey||y.metaKey)&&(y.preventDefault(),g.value=!0)}),ke("/",y=>{_(y)||(y.preventDefault(),g.value=!0)});const V="local";return(y,I)=>{var S;return a(),i("div",Ba,[l(V)==="local"?(a(),i(N,{key:0},[g.value?(a(),$(l(e),{key:0,onClose:I[0]||(I[0]=C=>g.value=!1)})):f("",!0),c("div",Aa,[h(Pe,{onClick:I[1]||(I[1]=C=>g.value=!0)})])],64)):l(V)==="algolia"?(a(),i(N,{key:1},[o.value?(a(),$(l(t),{key:0,algolia:((S=l(n).search)==null?void 0:S.options)??l(n).algolia,onVnodeBeforeMount:I[2]||(I[2]=C=>r.value=!0)},null,8,["algolia"])):f("",!0),r.value?f("",!0):(a(),i("div",xa,[h(Pe,{onClick:d})]))],64)):f("",!0)])}}});const za=b({__name:"VPNavBarSocialLinks",setup(s){const{theme:e}=P();return(t,n)=>l(e).socialLinks?(a(),$($e,{key:0,class:"VPNavBarSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}});const Da=m(za,[["__scopeId","data-v-4a30f6f6"]]),Ea=["href"],Fa=b({__name:"VPNavBarTitle",setup(s){const{site:e,theme:t}=P(),{hasSidebar:n}=D(),{currentLang:o}=X();return(r,d)=>(a(),i("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(n)}])},[c("a",{class:"title",href:l(t).logoLink??l(J)(l(o).link)},[u(r.$slots,"nav-bar-title-before",{},void 0,!0),l(t).logo?(a(),$(ee,{key:0,class:"logo",image:l(t).logo},null,8,["image"])):f("",!0),l(t).siteTitle?(a(),i(N,{key:1},[x(L(l(t).siteTitle),1)],64)):l(t).siteTitle===void 0?(a(),i(N,{key:2},[x(L(l(e).title),1)],64)):f("",!0),u(r.$slots,"nav-bar-title-after",{},void 0,!0)],8,Ea)],2))}});const Oa=m(Fa,[["__scopeId","data-v-b48f9446"]]),Ga={},Ua={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},ja=c("path",{d:"M0 0h24v24H0z",fill:"none"},null,-1),Ka=c("path",{d:" M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z ",class:"css-c4d79v"},null,-1),qa=[ja,Ka];function Ra(s,e){return a(),i("svg",Ua,qa)}const Ae=m(Ga,[["render",Ra]]),Wa={class:"items"},Ya={class:"title"},Ja=b({__name:"VPNavBarTranslations",setup(s){const{theme:e}=P(),{localeLinks:t,currentLang:n}=X({correspondingLink:!0});return(o,r)=>l(t).length&&l(n).label?(a(),$(be,{key:0,class:"VPNavBarTranslations",icon:Ae,label:l(e).langMenuLabel||"Change language"},{default:v(()=>[c("div",Wa,[c("p",Ya,L(l(n).label),1),(a(!0),i(N,null,A(l(t),d=>(a(),$(oe,{key:d.link,item:d},null,8,["item"]))),128))])]),_:1},8,["label"])):f("",!0)}});const Xa=m(Ja,[["__scopeId","data-v-0b7808b1"]]),Za=s=>(H("data-v-b720888e"),s=s(),z(),s),Qa={class:"container"},er={class:"title"},tr={class:"content"},sr=Za(()=>c("div",{class:"curtain"},null,-1)),nr={class:"content-body"},or=b({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(s){const{y:e}=Le(),{hasSidebar:t}=D(),{frontmatter:n}=P(),o=M({});return Ve(()=>{o.value={"has-sidebar":t.value,top:n.value.layout==="home"&&e.value===0}}),(r,d)=>(a(),i("div",{class:T(["VPNavBar",o.value])},[c("div",Qa,[c("div",er,[h(Oa,null,{"nav-bar-title-before":v(()=>[u(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),c("div",tr,[sr,c("div",nr,[u(r.$slots,"nav-bar-content-before",{},void 0,!0),h(Ha,{class:"search"}),h(La,{class:"menu"}),h(Xa,{class:"translations"}),h(go,{class:"appearance"}),h(Da,{class:"social-links"}),h(da,{class:"extra"}),u(r.$slots,"nav-bar-content-after",{},void 0,!0),h(ma,{class:"hamburger",active:r.isScreenOpen,onClick:d[0]||(d[0]=p=>r.$emit("toggle-screen"))},null,8,["active"])])])])],2))}});const ar=m(or,[["__scopeId","data-v-b720888e"]]),rr={key:0,class:"VPNavScreenAppearance"},lr={class:"text"},ir=b({__name:"VPNavScreenAppearance",setup(s){const{site:e,theme:t}=P();return(n,o)=>l(e).appearance?(a(),i("div",rr,[c("p",lr,L(l(t).darkModeSwitchLabel||"Appearance"),1),h(me)])):f("",!0)}});const cr=m(ir,[["__scopeId","data-v-0a19e25b"]]),ur=b({__name:"VPNavScreenMenuLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,n)=>(a(),$(E,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const dr=m(ur,[["__scopeId","data-v-9cb5ef7f"]]),_r={},vr={xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",viewBox:"0 0 24 24"},pr=c("path",{d:"M18.9,10.9h-6v-6c0-0.6-0.4-1-1-1s-1,0.4-1,1v6h-6c-0.6,0-1,0.4-1,1s0.4,1,1,1h6v6c0,0.6,0.4,1,1,1s1-0.4,1-1v-6h6c0.6,0,1-0.4,1-1S19.5,10.9,18.9,10.9z"},null,-1),hr=[pr];function fr(s,e){return a(),i("svg",vr,hr)}const mr=m(_r,[["render",fr]]),gr=b({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(s){const e=ne("close-screen");return(t,n)=>(a(),$(E,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,onClick:l(e)},{default:v(()=>[x(L(t.item.text),1)]),_:1},8,["href","target","rel","onClick"]))}});const xe=m(gr,[["__scopeId","data-v-dee1d2df"]]),br={class:"VPNavScreenMenuGroupSection"},$r={key:0,class:"title"},kr=b({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(s){return(e,t)=>(a(),i("div",br,[e.text?(a(),i("p",$r,L(e.text),1)):f("",!0),(a(!0),i(N,null,A(e.items,n=>(a(),$(xe,{key:n.text,item:n},null,8,["item"]))),128))]))}});const yr=m(kr,[["__scopeId","data-v-644fb433"]]),Pr=["aria-controls","aria-expanded"],Vr={class:"button-text"},wr=["id"],Lr={key:1,class:"group"},Sr=b({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(s){const e=s,t=M(!1),n=k(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(r,d)=>(a(),i("div",{class:T(["VPNavScreenMenuGroup",{open:t.value}])},[c("button",{class:"button","aria-controls":n.value,"aria-expanded":t.value,onClick:o},[c("span",Vr,L(r.text),1),h(mr,{class:"button-icon"})],8,Pr),c("div",{id:n.value,class:"items"},[(a(!0),i(N,null,A(r.items,p=>(a(),i(N,{key:p.text},["link"in p?(a(),i("div",{key:p.text,class:"item"},[h(xe,{item:p},null,8,["item"])])):(a(),i("div",Lr,[h(yr,{text:p.text,items:p.items},null,8,["text","items"])]))],64))),128))],8,wr)],2))}});const Mr=m(Sr,[["__scopeId","data-v-13dc6861"]]),Nr={key:0,class:"VPNavScreenMenu"},Ir=b({__name:"VPNavScreenMenu",setup(s){const{theme:e}=P();return(t,n)=>l(e).nav?(a(),i("nav",Nr,[(a(!0),i(N,null,A(l(e).nav,o=>(a(),i(N,{key:o.text},["link"in o?(a(),$(dr,{key:0,item:o},null,8,["item"])):(a(),$(Mr,{key:1,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):f("",!0)}}),Tr=b({__name:"VPNavScreenSocialLinks",setup(s){const{theme:e}=P();return(t,n)=>l(e).socialLinks?(a(),$($e,{key:0,class:"VPNavScreenSocialLinks",links:l(e).socialLinks},null,8,["links"])):f("",!0)}}),Cr={class:"list"},Br=b({__name:"VPNavScreenTranslations",setup(s){const{localeLinks:e,currentLang:t}=X({correspondingLink:!0}),n=M(!1);function o(){n.value=!n.value}return(r,d)=>l(e).length&&l(t).label?(a(),i("div",{key:0,class:T(["VPNavScreenTranslations",{open:n.value}])},[c("button",{class:"title",onClick:o},[h(Ae,{class:"icon lang"}),x(" "+L(l(t).label)+" ",1),h(Be,{class:"icon chevron"})]),c("ul",Cr,[(a(!0),i(N,null,A(l(e),p=>(a(),i("li",{key:p.link,class:"item"},[h(E,{class:"link",href:p.link},{default:v(()=>[x(L(p.text),1)]),_:2},1032,["href"])]))),128))])],2)):f("",!0)}});const Ar=m(Br,[["__scopeId","data-v-5610ffda"]]),xr={class:"container"},Hr=b({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(s){const e=M(null),t=Se(R?document.body:null);return(n,o)=>(a(),$(ce,{name:"fade",onEnter:o[0]||(o[0]=r=>t.value=!0),onAfterLeave:o[1]||(o[1]=r=>t.value=!1)},{default:v(()=>[n.open?(a(),i("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[c("div",xr,[u(n.$slots,"nav-screen-content-before",{},void 0,!0),h(Ir,{class:"menu"}),h(Ar,{class:"translations"}),h(cr,{class:"appearance"}),h(Tr,{class:"social-links"}),u(n.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):f("",!0)]),_:3}))}});const zr=m(Hr,[["__scopeId","data-v-5f2e656f"]]),Dr={key:0,class:"VPNav"},Er=b({__name:"VPNav",setup(s){const{isScreenOpen:e,closeScreen:t,toggleScreen:n}=Yn(),{frontmatter:o}=P(),r=k(()=>o.value.navbar!==!1);return Me("close-screen",t),te(()=>{R&&document.documentElement.classList.toggle("hide-nav",!r.value)}),(d,p)=>r.value?(a(),i("header",Dr,[h(ar,{"is-screen-open":l(e),onToggleScreen:l(n)},{"nav-bar-title-before":v(()=>[u(d.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(d.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(d.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(d.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),h(zr,{open:l(e)},{"nav-screen-content-before":v(()=>[u(d.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(d.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):f("",!0)}});const Fr=m(Er,[["__scopeId","data-v-aa833acb"]]),Or=s=>(H("data-v-2510404c"),s=s(),z(),s),Gr=["role","tabindex"],Ur=Or(()=>c("div",{class:"indicator"},null,-1)),jr=["onKeydown"],Kr={key:1,class:"items"},qr=b({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(s){const e=s,{collapsed:t,collapsible:n,isLink:o,isActiveLink:r,hasActiveLink:d,hasChildren:p,toggle:_}=ft(k(()=>e.item)),g=k(()=>p.value?"section":"div"),V=k(()=>o.value?"a":"div"),y=k(()=>p.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),I=k(()=>o.value?void 0:"button"),S=k(()=>[[`level-${e.depth}`],{collapsible:n.value},{collapsed:t.value},{"is-link":o.value},{"is-active":r.value},{"has-active":d.value}]);function C(w){"key"in w&&w.key!=="Enter"||!e.item.link&&_()}function B(){e.item.link&&_()}return(w,K)=>{const W=j("VPSidebarItem",!0);return a(),$(F(g.value),{class:T(["VPSidebarItem",S.value])},{default:v(()=>[w.item.text?(a(),i("div",Z({key:0,class:"item",role:I.value},Re(w.item.items?{click:C,keydown:C}:{},!0),{tabindex:w.item.items&&0}),[Ur,w.item.link?(a(),$(E,{key:0,tag:V.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:v(()=>[(a(),$(F(y.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(a(),$(F(y.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null?(a(),i("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:B,onKeydown:qe(B,["enter"]),tabindex:"0"},[h(fe,{class:"caret-icon"})],40,jr)):f("",!0)],16,Gr)):f("",!0),w.item.items&&w.item.items.length?(a(),i("div",Kr,[w.depth<5?(a(!0),i(N,{key:0},A(w.item.items,q=>(a(),$(W,{key:q.text,item:q,depth:w.depth+1},null,8,["item","depth"]))),128)):f("",!0)])):f("",!0)]),_:1},8,["class"])}}});const Rr=m(qr,[["__scopeId","data-v-2510404c"]]),He=s=>(H("data-v-20082c87"),s=s(),z(),s),Wr=He(()=>c("div",{class:"curtain"},null,-1)),Yr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Jr=He(()=>c("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),Xr=b({__name:"VPSidebar",props:{open:{type:Boolean}},setup(s){const{sidebarGroups:e,hasSidebar:t}=D(),n=s,o=M(null),r=Se(R?document.body:null);return U([n,o],()=>{var d;n.open?(r.value=!0,(d=o.value)==null||d.focus()):r.value=!1},{immediate:!0,flush:"post"}),(d,p)=>l(t)?(a(),i("aside",{key:0,class:T(["VPSidebar",{open:d.open}]),ref_key:"navEl",ref:o,onClick:p[0]||(p[0]=We(()=>{},["stop"]))},[Wr,c("nav",Yr,[Jr,u(d.$slots,"sidebar-nav-before",{},void 0,!0),(a(!0),i(N,null,A(l(e),_=>(a(),i("div",{key:_.text,class:"group"},[h(Rr,{item:_,depth:0},null,8,["item"])]))),128)),u(d.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):f("",!0)}});const Zr=m(Xr,[["__scopeId","data-v-20082c87"]]),Qr=b({__name:"VPSkipLink",setup(s){const e=se(),t=M();U(()=>e.path,()=>t.value.focus());function n({target:o}){const r=document.getElementById(decodeURIComponent(o.hash).slice(1));if(r){const d=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",d)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",d),r.focus(),window.scrollTo(0,0)}}return(o,r)=>(a(),i(N,null,[c("span",{ref_key:"backToTop",ref:t,tabindex:"-1"},null,512),c("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:n}," Skip to content ")],64))}});const el=m(Qr,[["__scopeId","data-v-d2de3463"]]),tl=b({__name:"Layout",setup(s){const{isOpen:e,open:t,close:n}=D(),o=se();U(()=>o.path,n),ht(e,n);const{frontmatter:r}=P(),d=Ye(),p=k(()=>!!d["home-hero-image"]);return Me("hero-image-slot-exists",p),(_,g)=>{const V=j("Content");return l(r).layout!==!1?(a(),i("div",{key:0,class:T(["Layout",l(r).pageClass])},[u(_.$slots,"layout-top",{},void 0,!0),h(el),h(et,{class:"backdrop",show:l(e),onClick:l(n)},null,8,["show","onClick"]),h(Fr,null,{"nav-bar-title-before":v(()=>[u(_.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":v(()=>[u(_.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":v(()=>[u(_.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":v(()=>[u(_.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":v(()=>[u(_.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":v(()=>[u(_.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),h(Wn,{open:l(e),onOpenMenu:l(t)},null,8,["open","onOpenMenu"]),h(Zr,{open:l(e)},{"sidebar-nav-before":v(()=>[u(_.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":v(()=>[u(_.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),h(Ln,null,{"page-top":v(()=>[u(_.$slots,"page-top",{},void 0,!0)]),"page-bottom":v(()=>[u(_.$slots,"page-bottom",{},void 0,!0)]),"not-found":v(()=>[u(_.$slots,"not-found",{},void 0,!0)]),"home-hero-before":v(()=>[u(_.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info":v(()=>[u(_.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-image":v(()=>[u(_.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":v(()=>[u(_.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":v(()=>[u(_.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":v(()=>[u(_.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":v(()=>[u(_.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":v(()=>[u(_.$slots,"doc-before",{},void 0,!0)]),"doc-after":v(()=>[u(_.$slots,"doc-after",{},void 0,!0)]),"doc-top":v(()=>[u(_.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":v(()=>[u(_.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":v(()=>[u(_.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":v(()=>[u(_.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":v(()=>[u(_.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":v(()=>[u(_.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":v(()=>[u(_.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":v(()=>[u(_.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),h(Tn),u(_.$slots,"layout-bottom",{},void 0,!0)],2)):(a(),$(V,{key:1}))}}});const sl=m(tl,[["__scopeId","data-v-ad6a442f"]]);const ol={Layout:sl,enhanceApp:({app:s})=>{s.component("Badge",Xe)}};export{Sa as c,ol as t,P as u}; diff --git a/assets/config_build-options.md.30c53ed9.js b/assets/config_build-options.md.83f54696.js similarity index 87% rename from assets/config_build-options.md.30c53ed9.js rename to assets/config_build-options.md.83f54696.js index 8c04062..8775095 100644 --- a/assets/config_build-options.md.30c53ed9.js +++ b/assets/config_build-options.md.83f54696.js @@ -1 +1 @@ -import{_ as d,o as l,c as a,Q as e,k as i,a as o}from"./chunks/framework.e1e0b12f.js";const P=JSON.parse('{"title":"构建选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/build-options.md","filePath":"config/build-options.md","lastUpdated":1699711149000}'),c={name:"config/build-options.md"},n=e('

构建选项

build.outDir

  • 类型: string
  • 默认: dist

指定输出路径(相对于项目根目录)。

build.fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

build 命令构建后生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,同时也会生成对应的 manifest.json 文件。

  • 值为 false 时,关闭文件哈希。
  • 值为 true- 时,将生成文件名哈希和版本映射文件manifest.json
  • 值为 ? 时,仅生成版本映射文件manifest.json

build.sourcemap

  • 类型: boolean | 'inline'
  • 默认: false

构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。

build.minify

  • 类型: boolean
  • 默认: process.env.NODE_ENV === "production"

全局配置, 设置为 false 可以统一禁用最小化混淆或压缩。

⚠️ 提示

该配置项仅对任务类型 typehtml, style, script, static, image 有效。这里是全局配置,也可以在每个任务项内单独配置 minify

build.htmlMinify

  • 类型: boolean | HtmlMinifyOptions
  • 默认:build.minify 一致

HTML 最小化压缩配置项,此选项配置后会覆盖 build.minify

html压缩是基于 html-minifier-terser 插件, 详细配置请参见 这里

',19),t=i("h2",{"js-minify":"",id:"build-jsminify",tabindex:"-1"},[o("build.jsMinify "),i("a",{class:"header-anchor",href:"#build-jsminify","aria-label":'Permalink to "build.jsMinify {js-minify}"'},"​")],-1),s=e('
  • 类型: boolean | TerserMinifyOptions
  • 默认:build.minify 一致

Javascript 最小化混淆配置项,此选项配置后会覆盖 build.minify

JS最小化混淆是基于 terser 插件, 详细配置请参见 这里

',3),r=i("h2",{"css-minify":"",id:"build-cssminify",tabindex:"-1"},[o("build.cssMinify "),i("a",{class:"header-anchor",href:"#build-cssminify","aria-label":'Permalink to "build.cssMinify {css-minify}"'},"​")],-1),u=e('
  • 类型: boolean | CSSNanoOptions
  • 默认:build.minify 一致

CSS 最小化压缩配置项,此选项配置后会覆盖 build.minify

CSS压缩是基于 cssnano 插件, 详细配置请参见 这里

',3),m=i("h2",{"image-minify":"",id:"build-imageminify",tabindex:"-1"},[o("build.imageMinify "),i("a",{class:"header-anchor",href:"#build-imageminify","aria-label":'Permalink to "build.imageMinify {image-minify}"'},"​")],-1),b=e('
  • 类型: boolean | {plugins?: Plugin[], options?: Options}
  • 默认: dist

图片压缩配置项,此选项配置后会覆盖 build.minify

图片压缩是基于 gulp-imagemin 插件, 详细配置请参见 这里

🚨 提醒

由于安装 gulp-imagemin 依赖经常失败(国内环境),且图片压缩是一项耗时的一次性任务。所以 pipflowgulp-imagemin 的安装提取到项目的依赖中。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

',4),p=[n,t,s,r,u,m,b];function f(_,h,g,y,T,k){return l(),a("div",null,p)}const q=d(c,[["render",f]]);export{P as __pageData,q as default}; +import{_ as d,o as l,c as a,Q as e,k as i,a as o}from"./chunks/framework.e1e0b12f.js";const P=JSON.parse('{"title":"构建选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/build-options.md","filePath":"config/build-options.md","lastUpdated":1702347208000}'),c={name:"config/build-options.md"},n=e('

构建选项

build.outDir

  • 类型: string
  • 默认: dist

指定输出路径(相对于项目根目录)。

build.fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

build 命令构建后生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,同时也会生成对应的 manifest.json 文件。

  • 值为 false 时,关闭文件哈希。
  • 值为 true- 时,将生成文件名哈希和版本映射文件manifest.json
  • 值为 ? 时,仅生成版本映射文件manifest.json

build.sourcemap

  • 类型: boolean | 'inline'
  • 默认: false

构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。

build.minify

  • 类型: boolean
  • 默认: process.env.NODE_ENV === "production"

全局配置, 设置为 false 可以统一禁用最小化混淆或压缩。

⚠️ 提示

该配置项仅对任务类型 typehtml, style, script, static, image 有效。这里是全局配置,也可以在每个任务项内单独配置 minify

build.htmlMinify

  • 类型: boolean | HtmlMinifyOptions
  • 默认:build.minify 一致

HTML 最小化压缩配置项,此选项配置后会覆盖 build.minify

html压缩是基于 html-minifier-terser 插件, 详细配置请参见 这里

',19),t=i("h2",{"js-minify":"",id:"build-jsminify",tabindex:"-1"},[o("build.jsMinify "),i("a",{class:"header-anchor",href:"#build-jsminify","aria-label":'Permalink to "build.jsMinify {js-minify}"'},"​")],-1),s=e('
  • 类型: boolean | TerserMinifyOptions
  • 默认:build.minify 一致

Javascript 最小化混淆配置项,此选项配置后会覆盖 build.minify

JS最小化混淆是基于 terser 插件, 详细配置请参见 这里

',3),r=i("h2",{"css-minify":"",id:"build-cssminify",tabindex:"-1"},[o("build.cssMinify "),i("a",{class:"header-anchor",href:"#build-cssminify","aria-label":'Permalink to "build.cssMinify {css-minify}"'},"​")],-1),u=e('
  • 类型: boolean | CSSNanoOptions
  • 默认:build.minify 一致

CSS 最小化压缩配置项,此选项配置后会覆盖 build.minify

CSS压缩是基于 cssnano 插件, 详细配置请参见 这里

',3),m=i("h2",{"image-minify":"",id:"build-imageminify",tabindex:"-1"},[o("build.imageMinify "),i("a",{class:"header-anchor",href:"#build-imageminify","aria-label":'Permalink to "build.imageMinify {image-minify}"'},"​")],-1),b=e('
  • 类型: boolean | {plugins?: Plugin[], options?: Options}
  • 默认: dist

图片压缩配置项,此选项配置后会覆盖 build.minify

图片压缩是基于 gulp-imagemin 插件, 详细配置请参见 这里

🚨 提醒

由于安装 gulp-imagemin 依赖经常失败(国内环境),且图片压缩是一项耗时的一次性任务。所以 pipflowgulp-imagemin 的安装提取到项目的依赖中。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

',4),p=[n,t,s,r,u,m,b];function f(_,h,g,y,T,k){return l(),a("div",null,p)}const q=d(c,[["render",f]]);export{P as __pageData,q as default}; diff --git a/assets/config_build-options.md.30c53ed9.lean.js b/assets/config_build-options.md.83f54696.lean.js similarity index 94% rename from assets/config_build-options.md.30c53ed9.lean.js rename to assets/config_build-options.md.83f54696.lean.js index 8162a1b..2052f22 100644 --- a/assets/config_build-options.md.30c53ed9.lean.js +++ b/assets/config_build-options.md.83f54696.lean.js @@ -1 +1 @@ -import{_ as d,o as l,c as a,Q as e,k as i,a as o}from"./chunks/framework.e1e0b12f.js";const P=JSON.parse('{"title":"构建选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/build-options.md","filePath":"config/build-options.md","lastUpdated":1699711149000}'),c={name:"config/build-options.md"},n=e("",19),t=i("h2",{"js-minify":"",id:"build-jsminify",tabindex:"-1"},[o("build.jsMinify "),i("a",{class:"header-anchor",href:"#build-jsminify","aria-label":'Permalink to "build.jsMinify {js-minify}"'},"​")],-1),s=e("",3),r=i("h2",{"css-minify":"",id:"build-cssminify",tabindex:"-1"},[o("build.cssMinify "),i("a",{class:"header-anchor",href:"#build-cssminify","aria-label":'Permalink to "build.cssMinify {css-minify}"'},"​")],-1),u=e("",3),m=i("h2",{"image-minify":"",id:"build-imageminify",tabindex:"-1"},[o("build.imageMinify "),i("a",{class:"header-anchor",href:"#build-imageminify","aria-label":'Permalink to "build.imageMinify {image-minify}"'},"​")],-1),b=e("",4),p=[n,t,s,r,u,m,b];function f(_,h,g,y,T,k){return l(),a("div",null,p)}const q=d(c,[["render",f]]);export{P as __pageData,q as default}; +import{_ as d,o as l,c as a,Q as e,k as i,a as o}from"./chunks/framework.e1e0b12f.js";const P=JSON.parse('{"title":"构建选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/build-options.md","filePath":"config/build-options.md","lastUpdated":1702347208000}'),c={name:"config/build-options.md"},n=e("",19),t=i("h2",{"js-minify":"",id:"build-jsminify",tabindex:"-1"},[o("build.jsMinify "),i("a",{class:"header-anchor",href:"#build-jsminify","aria-label":'Permalink to "build.jsMinify {js-minify}"'},"​")],-1),s=e("",3),r=i("h2",{"css-minify":"",id:"build-cssminify",tabindex:"-1"},[o("build.cssMinify "),i("a",{class:"header-anchor",href:"#build-cssminify","aria-label":'Permalink to "build.cssMinify {css-minify}"'},"​")],-1),u=e("",3),m=i("h2",{"image-minify":"",id:"build-imageminify",tabindex:"-1"},[o("build.imageMinify "),i("a",{class:"header-anchor",href:"#build-imageminify","aria-label":'Permalink to "build.imageMinify {image-minify}"'},"​")],-1),b=e("",4),p=[n,t,s,r,u,m,b];function f(_,h,g,y,T,k){return l(),a("div",null,p)}const q=d(c,[["render",f]]);export{P as __pageData,q as default}; diff --git a/assets/config_index.md.4d8358d1.js b/assets/config_index.md.70a8d4ed.js similarity index 99% rename from assets/config_index.md.4d8358d1.js rename to assets/config_index.md.70a8d4ed.js index f412697..121e967 100644 --- a/assets/config_index.md.4d8358d1.js +++ b/assets/config_index.md.70a8d4ed.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"配置 pipflow","description":"","frontmatter":{"title":"配置 pipflow"},"headers":[],"relativePath":"config/index.md","filePath":"config/index.md","lastUpdated":1699711149000}'),l={name:"config/index.md"},o=p(`

配置 pipflow

当以命令行方式运行 pipflow 时,pipflow 会自动解析 项目根目录 下名为 pipflow.config.js 的配置文件(仅支持 jsjson 扩展名)。

最基础的配置文件是这样的:

js
// pipflow.config.js
+import{_ as s,o as n,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"配置 pipflow","description":"","frontmatter":{"title":"配置 pipflow"},"headers":[],"relativePath":"config/index.md","filePath":"config/index.md","lastUpdated":1702347208000}'),l={name:"config/index.md"},o=p(`

配置 pipflow

当以命令行方式运行 pipflow 时,pipflow 会自动解析 项目根目录 下名为 pipflow.config.js 的配置文件(仅支持 jsjson 扩展名)。

最基础的配置文件是这样的:

js
// pipflow.config.js
 module.exports = {
   // 配置选项
 }
// pipflow.config.js
diff --git a/assets/config_index.md.4d8358d1.lean.js b/assets/config_index.md.70a8d4ed.lean.js
similarity index 85%
rename from assets/config_index.md.4d8358d1.lean.js
rename to assets/config_index.md.70a8d4ed.lean.js
index 9408baa..34e54fc 100644
--- a/assets/config_index.md.4d8358d1.lean.js
+++ b/assets/config_index.md.70a8d4ed.lean.js
@@ -1 +1 @@
-import{_ as s,o as n,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"配置 pipflow","description":"","frontmatter":{"title":"配置 pipflow"},"headers":[],"relativePath":"config/index.md","filePath":"config/index.md","lastUpdated":1699711149000}'),l={name:"config/index.md"},o=p("",15),e=[o];function c(t,r,i,y,E,d){return n(),a("div",null,e)}const h=s(l,[["render",c]]);export{g as __pageData,h as default};
+import{_ as s,o as n,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"配置 pipflow","description":"","frontmatter":{"title":"配置 pipflow"},"headers":[],"relativePath":"config/index.md","filePath":"config/index.md","lastUpdated":1702347208000}'),l={name:"config/index.md"},o=p("",15),e=[o];function c(t,r,i,y,E,d){return n(),a("div",null,e)}const h=s(l,[["render",c]]);export{g as __pageData,h as default};
diff --git a/assets/config_server-options.md.b94fc321.js b/assets/config_server-options.md.38b44b96.js
similarity index 99%
rename from assets/config_server-options.md.b94fc321.js
rename to assets/config_server-options.md.38b44b96.js
index c0eabe0..26a3994 100644
--- a/assets/config_server-options.md.b94fc321.js
+++ b/assets/config_server-options.md.38b44b96.js
@@ -1,4 +1,4 @@
-import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"开发服务器选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/server-options.md","filePath":"config/server-options.md","lastUpdated":1699711149000}'),p={name:"config/server-options.md"},o=l(`

开发服务器选项

pipflow 的本地开发服务器是基于 Browsersync 工具, 它为开发过程提供自动化、高效的同步与调试功能。

想要了解更多配置细节,请参考 这里

server.host

  • 类型: string
  • 默认: localhost

指定服务器应该监听哪个 IP 地址。

server.port

  • 类型: number
  • 默认: 9527

指定开发服务器端口。

也可以通过 CLI 使用 --port 3000 来设置。

server.https

  • 类型: boolean
  • 默认: false

为本地主机开发启用 https。注意: 代理选项不需要这样做,因为它会从目标网址中推断出来。

js
// Enable HTTPS for snippet mode
+import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"开发服务器选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/server-options.md","filePath":"config/server-options.md","lastUpdated":1702347208000}'),p={name:"config/server-options.md"},o=l(`

开发服务器选项

pipflow 的本地开发服务器是基于 Browsersync 工具, 它为开发过程提供自动化、高效的同步与调试功能。

想要了解更多配置细节,请参考 这里

server.host

  • 类型: string
  • 默认: localhost

指定服务器应该监听哪个 IP 地址。

server.port

  • 类型: number
  • 默认: 9527

指定开发服务器端口。

也可以通过 CLI 使用 --port 3000 来设置。

server.https

  • 类型: boolean
  • 默认: false

为本地主机开发启用 https。注意: 代理选项不需要这样做,因为它会从目标网址中推断出来。

js
// Enable HTTPS for snippet mode
 {
   https: true
 }
diff --git a/assets/config_server-options.md.b94fc321.lean.js b/assets/config_server-options.md.38b44b96.lean.js
similarity index 85%
rename from assets/config_server-options.md.b94fc321.lean.js
rename to assets/config_server-options.md.38b44b96.lean.js
index 5ca847a..c41f8bf 100644
--- a/assets/config_server-options.md.b94fc321.lean.js
+++ b/assets/config_server-options.md.38b44b96.lean.js
@@ -1 +1 @@
-import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"开发服务器选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/server-options.md","filePath":"config/server-options.md","lastUpdated":1699711149000}'),p={name:"config/server-options.md"},o=l("",44),e=[o];function r(t,c,E,i,y,d){return n(),a("div",null,e)}const F=s(p,[["render",r]]);export{u as __pageData,F as default};
+import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"开发服务器选项","description":"","frontmatter":{},"headers":[],"relativePath":"config/server-options.md","filePath":"config/server-options.md","lastUpdated":1702347208000}'),p={name:"config/server-options.md"},o=l("",44),e=[o];function r(t,c,E,i,y,d){return n(),a("div",null,e)}const F=s(p,[["render",r]]);export{u as __pageData,F as default};
diff --git a/assets/config_shared-options.md.ebf18efd.js b/assets/config_shared-options.md.0b6e8efc.js
similarity index 96%
rename from assets/config_shared-options.md.ebf18efd.js
rename to assets/config_shared-options.md.0b6e8efc.js
index b29bf2d..bfb54c2 100644
--- a/assets/config_shared-options.md.ebf18efd.js
+++ b/assets/config_shared-options.md.0b6e8efc.js
@@ -1 +1 @@
-import{_ as e,o,c as a,Q as c}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"共享配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/shared-options.md","filePath":"config/shared-options.md","lastUpdated":1699711149000}'),s={name:"config/shared-options.md"},d=c('

共享配置

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

glob base (有时称为 glob parent)是 glob 字符串中任何特殊字符之前的路径段。因此,/src/js/**.js 的 blob base 是 /src/js/。所有匹配 glob 的路径都保证共享 glob base,该路径段不能是可变的。

src() 生成的 Vinyl 实例是用 glob base 集作为它们的 base 属性构造的。当使用 dest() 写入文件系统时,将从输出路径中删除 base ,以保留目录结构。

有关更深入的信息,请参阅 glob-parent 库。

publicDir

  • 类型: string | false
  • 默认: "public"

作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供,并在构建期间复制到 outDir 的根目录,并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径,也可以是相对于项目根目录的相对路径。

publicDir 设定为 false 可以关闭此项功能。

alias

  • 类型: { [key string]: string }

全局字符串别名,在处理html, javascript, css 文件时, 每一项将会被静态替换。

友情提醒

这里的 alias 仅仅是字符串的别名替换,不同于 webpack, vitealias 功能。

envDir

  • 类型: string
  • 默认: root

用于加载 .env 文件的目录。可以是一个绝对路径,也可以是相对于项目根的路径。

关于环境文件的更多信息,请参见 这里

',19),t=[d];function r(i,l,n,p,b,h){return o(),a("div",null,t)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; +import{_ as e,o,c as a,Q as c}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"共享配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/shared-options.md","filePath":"config/shared-options.md","lastUpdated":1702347208000}'),s={name:"config/shared-options.md"},d=c('

共享配置

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

glob base (有时称为 glob parent)是 glob 字符串中任何特殊字符之前的路径段。因此,/src/js/**.js 的 blob base 是 /src/js/。所有匹配 glob 的路径都保证共享 glob base,该路径段不能是可变的。

src() 生成的 Vinyl 实例是用 glob base 集作为它们的 base 属性构造的。当使用 dest() 写入文件系统时,将从输出路径中删除 base ,以保留目录结构。

有关更深入的信息,请参阅 glob-parent 库。

publicDir

  • 类型: string | false
  • 默认: "public"

作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供,并在构建期间复制到 outDir 的根目录,并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径,也可以是相对于项目根目录的相对路径。

publicDir 设定为 false 可以关闭此项功能。

alias

  • 类型: { [key string]: string }

全局字符串别名,在处理html, javascript, css 文件时, 每一项将会被静态替换。

友情提醒

这里的 alias 仅仅是字符串的别名替换,不同于 webpack, vitealias 功能。

envDir

  • 类型: string
  • 默认: root

用于加载 .env 文件的目录。可以是一个绝对路径,也可以是相对于项目根的路径。

关于环境文件的更多信息,请参见 这里

',19),t=[d];function r(i,l,n,p,b,h){return o(),a("div",null,t)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; diff --git a/assets/config_shared-options.md.ebf18efd.lean.js b/assets/config_shared-options.md.0b6e8efc.lean.js similarity index 70% rename from assets/config_shared-options.md.ebf18efd.lean.js rename to assets/config_shared-options.md.0b6e8efc.lean.js index 05e5f6a..24438a2 100644 --- a/assets/config_shared-options.md.ebf18efd.lean.js +++ b/assets/config_shared-options.md.0b6e8efc.lean.js @@ -1 +1 @@ -import{_ as e,o,c as a,Q as c}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"共享配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/shared-options.md","filePath":"config/shared-options.md","lastUpdated":1699711149000}'),s={name:"config/shared-options.md"},d=c("",19),t=[d];function r(i,l,n,p,b,h){return o(),a("div",null,t)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; +import{_ as e,o,c as a,Q as c}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"共享配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/shared-options.md","filePath":"config/shared-options.md","lastUpdated":1702347208000}'),s={name:"config/shared-options.md"},d=c("",19),t=[d];function r(i,l,n,p,b,h){return o(),a("div",null,t)}const _=e(s,[["render",r]]);export{g as __pageData,_ as default}; diff --git a/assets/config_task-options.md.3ea29b52.js b/assets/config_task-options.md.2736a7fe.js similarity index 94% rename from assets/config_task-options.md.3ea29b52.js rename to assets/config_task-options.md.2736a7fe.js index 937445f..9042f07 100644 --- a/assets/config_task-options.md.3ea29b52.js +++ b/assets/config_task-options.md.2736a7fe.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"任务配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/task-options.md","filePath":"config/task-options.md","lastUpdated":1699711149000}'),o={name:"config/task-options.md"},p=l(`

任务配置

每个任务的单独配置项,设置后会覆盖全局配置。

name

  • 类型: string
  • 默认: [type]:[index]

任务名称, 默认为 任务类型 + 任务索引

type

  • 类型: string

任务类型。 查看所有任务类型 请参见 这里

input

  • 类型: string | string[] | object

指定任务入口文件。

dest

  • 类型: string
  • 默认: dist

指定任务输出路径。

继承 build.outDir 配置,请参见 这里

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

继承 全局 base 配置,请参见 这里

compiler

  • 类型: string

文件转译工具。仅对任务类型为 html, style, script 有效。

  1. type'html'时, compiler 为 HTML模板引擎;(请参见 这里)

内置模板引擎: Pug, EJS, Handlebars, Nunjucks, art-template

  1. type'style'时, compiler 为 CSS预处理器。(请参见 这里)

支持的 CSS 预处理器: sass, less, stylus

  1. type'script'时, compilerbabel

compilerOptions

  • 类型: object

转译配置项。

  1. HTML模板引擎 配置项,请参见 这里
  2. CSS预处理器 配置项,请参见 这里

1. HTML模板引擎

当转译器compiler 为 HTML模板引擎时,其值为传递给 HTML 模板引擎的选项。

ts
interface CompilerOptions {
+import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"任务配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/task-options.md","filePath":"config/task-options.md","lastUpdated":1702347208000}'),o={name:"config/task-options.md"},p=l(`

任务配置

每个任务的单独配置项,设置后会覆盖全局配置。

name

  • 类型: string
  • 默认: [type]:[index]

任务名称, 默认为 任务类型 + 任务索引

type

  • 类型: string

任务类型。 查看所有任务类型 请参见 这里

input

  • 类型: string | string[] | object

指定任务入口文件。

dest

  • 类型: string
  • 默认: dist

指定任务输出路径。

继承 build.outDir 配置,请参见 这里

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

继承 全局 base 配置,请参见 这里

compiler

  • 类型: string

文件转译工具。仅对任务类型为 html, style, script 有效。

  1. type'html'时, compiler 为 HTML模板引擎;(请参见 这里)

内置模板引擎: Pug, EJS, Handlebars, Nunjucks, art-template

  1. type'style'时, compiler 为 CSS预处理器。(请参见 这里)

支持的 CSS 预处理器: sass, less, stylus

  1. type'script'时, compilerbabel

compilerOptions

  • 类型: object

转译配置项。

  1. HTML模板引擎 配置项,请参见 这里
  2. CSS预处理器 配置项,请参见 这里

1. HTML模板引擎

当转译器compiler 为 HTML模板引擎时,其值为传递给 HTML 模板引擎的选项。

ts
interface CompilerOptions {
   // 渲染时的数据
   data: {
     [key: string]: any
@@ -58,7 +58,7 @@ import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
   preprocessorOptions: {
     [key: string]: any
   }
-}

每个预处理器支持的选项可以在它们各自的文档中找到:

示例:

js
// pipflow.config.js
+}

每个预处理器支持的选项可以在它们各自的文档中找到:

示例:

js
// pipflow.config.js
 module.exports = {
   tasks: [
     {
@@ -90,4 +90,4 @@ import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       }
     }
   ]
-}

additionalData 选项

所有预处理器选项支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

minify

  • 类型: boolean | MinifyOptions
  • 默认: false

文件最小化混淆或压缩。

继承 build.minify 配置 或 对应的混淆/压缩配置项,请参见 这里

plugins

  • 类型: function[]

自定义任务处理流程。 请参见 这里

fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

文件哈希和版本控制

继承 build.fileHash 配置,请参见 这里

sourcemap

  • 类型: boolean
  • 默认: false

是否生成 source map 文件。

继承 build.sourcemap 配置,请参见 这里

alias

  • 类型: { [key: string]: string }

别名替换,会合并全局 alias 配置。

继承 全局 alias 配置,请参见 这里

watch

  • 类型: boolean
  • 默认: false

serve 阶段是否监视文件变动并重新编译、刷新页面。

filename

  • 类型: string
  • 默认: archive

生成的文件名。目前仅对 archive 任务类型有效。

温馨提示

如果需要创建压缩包,可以使用 pipflow pack 命令快速生成压缩包。 请参见 [这里]。

`,71),e=[p];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const m=s(o,[["render",c]]);export{u as __pageData,m as default}; +}

additionalData 选项

所有预处理器选项支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

minify

  • 类型: boolean | MinifyOptions
  • 默认: false

文件最小化混淆或压缩。

继承 build.minify 配置 或 对应的混淆/压缩配置项,请参见 这里

plugins

  • 类型: function[]

自定义任务处理流程。 请参见 这里

fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

文件哈希和版本控制

继承 build.fileHash 配置,请参见 这里

sourcemap

  • 类型: boolean
  • 默认: false

是否生成 source map 文件。

继承 build.sourcemap 配置,请参见 这里

alias

  • 类型: { [key: string]: string }

别名替换,会合并全局 alias 配置。

继承 全局 alias 配置,请参见 这里

watch

  • 类型: boolean
  • 默认: false

serve 阶段是否监视文件变动并重新编译、刷新页面。

支持 'html', 'style', 'script', 'static', 'image', 'copy', 'user' 类型任务。

`,68),e=[p];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const m=s(o,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/config_task-options.md.3ea29b52.lean.js b/assets/config_task-options.md.2736a7fe.lean.js similarity index 70% rename from assets/config_task-options.md.3ea29b52.lean.js rename to assets/config_task-options.md.2736a7fe.lean.js index eecad2a..7ea6c52 100644 --- a/assets/config_task-options.md.3ea29b52.lean.js +++ b/assets/config_task-options.md.2736a7fe.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"任务配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/task-options.md","filePath":"config/task-options.md","lastUpdated":1699711149000}'),o={name:"config/task-options.md"},p=l("",71),e=[p];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const m=s(o,[["render",c]]);export{u as __pageData,m as default}; +import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"任务配置","description":"","frontmatter":{},"headers":[],"relativePath":"config/task-options.md","filePath":"config/task-options.md","lastUpdated":1702347208000}'),o={name:"config/task-options.md"},p=l("",68),e=[p];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const m=s(o,[["render",c]]);export{u as __pageData,m as default}; diff --git a/assets/guide_assets.md.0bca6177.js b/assets/guide_assets.md.38934978.js similarity index 99% rename from assets/guide_assets.md.0bca6177.js rename to assets/guide_assets.md.38934978.js index 5aedc70..bf3a401 100644 --- a/assets/guide_assets.md.0bca6177.js +++ b/assets/guide_assets.md.38934978.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"静态资源处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/assets.md","filePath":"guide/assets.md","lastUpdated":1699711149000}'),o={name:"guide/assets.md"},p=l(`

静态资源处理

资源文件URL

在页面中引入资源文件,建议用绝对路径(以 / 开头)引入。

你可以在 pipflow.config.js 配置文件中设置路径别名,在页面内通过别名+路径引入文件,编译阶段会被统一静态替换。

json
// pipflow.config.json
+import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"静态资源处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/assets.md","filePath":"guide/assets.md","lastUpdated":1702347208000}'),o={name:"guide/assets.md"},p=l(`

静态资源处理

资源文件URL

在页面中引入资源文件,建议用绝对路径(以 / 开头)引入。

你可以在 pipflow.config.js 配置文件中设置路径别名,在页面内通过别名+路径引入文件,编译阶段会被统一静态替换。

json
// pipflow.config.json
 {
   "alias": {
     "@img": "/assets/images",
diff --git a/assets/guide_assets.md.0bca6177.lean.js b/assets/guide_assets.md.38934978.lean.js
similarity index 84%
rename from assets/guide_assets.md.0bca6177.lean.js
rename to assets/guide_assets.md.38934978.lean.js
index 8cc8200..2569ece 100644
--- a/assets/guide_assets.md.0bca6177.lean.js
+++ b/assets/guide_assets.md.38934978.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"静态资源处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/assets.md","filePath":"guide/assets.md","lastUpdated":1699711149000}'),o={name:"guide/assets.md"},p=l("",16),e=[p];function t(c,i,r,d,u,E){return a(),n("div",null,e)}const h=s(o,[["render",t]]);export{g as __pageData,h as default};
+import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"静态资源处理","description":"","frontmatter":{},"headers":[],"relativePath":"guide/assets.md","filePath":"guide/assets.md","lastUpdated":1702347208000}'),o={name:"guide/assets.md"},p=l("",16),e=[p];function t(c,i,r,d,u,E){return a(),n("div",null,e)}const h=s(o,[["render",t]]);export{g as __pageData,h as default};
diff --git a/assets/guide_build.md.14f3acdc.js b/assets/guide_build.md.d0548d4d.js
similarity index 99%
rename from assets/guide_build.md.14f3acdc.js
rename to assets/guide_build.md.d0548d4d.js
index b7c21c5..b0038ac 100644
--- a/assets/guide_build.md.14f3acdc.js
+++ b/assets/guide_build.md.d0548d4d.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as l,Q as o}from"./chunks/framework.e1e0b12f.js";const b=JSON.parse('{"title":"构建生产版本","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md","lastUpdated":1699711149000}'),e={name:"guide/build.md"},p=o(`

构建生产版本

当需要将应用部署到生产环境时,只需运行 pipflow build 命令。默认情况下,它使用 <root>/index.html 作为其入口,并生成能够静态部署的应用程序包。

浏览器兼容性

browserslist

通过 pipflow create 创建的项目,在项目根目录下有一个单独的 .browserslistrc 文件,用于指定项目支持的浏览器范围。你也可以在 package.json 文件里配置 browserslist 字段。

这个值会被 @babel/preset-envpostcss-preset-env 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

现在查阅 这里 了解如何指定浏览器范围。

Polyfill

一个基于 pipflow CLI 创建的项目,它通过 @babel/preset-envbrowserslist 配置来决定项目需要的 polyfill。

默认情况下,babel.config.js 预设 useBuiltIns: "usage",这样它会根据源代码中出现的语言特性自动检测需要的 polyfill。这确保了最终包里 polyfill 数量的最小化。然而,这也意味着如果其中一个依赖需要特殊的 polyfill,默认情况下 Babel 无法将其检测出来。

你可以通过修改项目中的 babel.config.js 配置来自行调整 polyfill。

温馨提示

我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出的 polyfill 在 browserslist 的目标中不需要,则它会被自动排除。

自定义构建

构建生产环境应用程序包默认是通过 pipflow build 命令来完成的。如果在未修改配置文件 pipflow.config.jstasks 选项时,其构建过程任务如下:

└─┬ build
+import{_ as s,o as a,c as l,Q as o}from"./chunks/framework.e1e0b12f.js";const b=JSON.parse('{"title":"构建生产版本","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md","lastUpdated":1702347208000}'),e={name:"guide/build.md"},p=o(`

构建生产版本

当需要将应用部署到生产环境时,只需运行 pipflow build 命令。默认情况下,它使用 <root>/index.html 作为其入口,并生成能够静态部署的应用程序包。

浏览器兼容性

browserslist

通过 pipflow create 创建的项目,在项目根目录下有一个单独的 .browserslistrc 文件,用于指定项目支持的浏览器范围。你也可以在 package.json 文件里配置 browserslist 字段。

这个值会被 @babel/preset-envpostcss-preset-env 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

现在查阅 这里 了解如何指定浏览器范围。

Polyfill

一个基于 pipflow CLI 创建的项目,它通过 @babel/preset-envbrowserslist 配置来决定项目需要的 polyfill。

默认情况下,babel.config.js 预设 useBuiltIns: "usage",这样它会根据源代码中出现的语言特性自动检测需要的 polyfill。这确保了最终包里 polyfill 数量的最小化。然而,这也意味着如果其中一个依赖需要特殊的 polyfill,默认情况下 Babel 无法将其检测出来。

你可以通过修改项目中的 babel.config.js 配置来自行调整 polyfill。

温馨提示

我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出的 polyfill 在 browserslist 的目标中不需要,则它会被自动排除。

自定义构建

构建生产环境应用程序包默认是通过 pipflow build 命令来完成的。如果在未修改配置文件 pipflow.config.jstasks 选项时,其构建过程任务如下:

└─┬ build
   └─┬ <series>
     ├── del:dest
     ├─┬ <parallel>
diff --git a/assets/guide_build.md.14f3acdc.lean.js b/assets/guide_build.md.d0548d4d.lean.js
similarity index 84%
rename from assets/guide_build.md.14f3acdc.lean.js
rename to assets/guide_build.md.d0548d4d.lean.js
index 19a8bd2..a6e9373 100644
--- a/assets/guide_build.md.14f3acdc.lean.js
+++ b/assets/guide_build.md.d0548d4d.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as l,Q as o}from"./chunks/framework.e1e0b12f.js";const b=JSON.parse('{"title":"构建生产版本","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md","lastUpdated":1699711149000}'),e={name:"guide/build.md"},p=o("",23),n=[p];function t(c,i,r,d,u,y){return a(),l("div",null,n)}const h=s(e,[["render",t]]);export{b as __pageData,h as default};
+import{_ as s,o as a,c as l,Q as o}from"./chunks/framework.e1e0b12f.js";const b=JSON.parse('{"title":"构建生产版本","description":"","frontmatter":{},"headers":[],"relativePath":"guide/build.md","filePath":"guide/build.md","lastUpdated":1702347208000}'),e={name:"guide/build.md"},p=o("",23),n=[p];function t(c,i,r,d,u,y){return a(),l("div",null,n)}const h=s(e,[["render",t]]);export{b as __pageData,h as default};
diff --git a/assets/guide_cli.md.cc1e1b7e.js b/assets/guide_cli.md.b7fe1365.js
similarity index 97%
rename from assets/guide_cli.md.cc1e1b7e.js
rename to assets/guide_cli.md.b7fe1365.js
index 9bec188..167b25c 100644
--- a/assets/guide_cli.md.cc1e1b7e.js
+++ b/assets/guide_cli.md.b7fe1365.js
@@ -1,4 +1,4 @@
-import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=JSON.parse('{"title":"命令行界面","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cli.md","filePath":"guide/cli.md","lastUpdated":1699711149000}'),p={name:"guide/cli.md"},o=l(`

命令行界面

CLI (@pipflow/cli) 是一个全局安装的 npm 包,提供了终端里的 pipflow 命令。你可以通过 pipflow create 快速搭建一个新项目,然后运行 pipflow dev 进行便捷开发。下面我们来深入介绍每个命令的使用。

温馨提示

你也可以在终端里使用 pw 命令。它是 pipflow 命令的缩写,由 pipflow 的首尾字母组合而成。

创建项目

pipflow create

创建一个新项目。

使用

运行以下命令来创建一个新项目:

bash
pipflow create hello-world
pipflow create hello-world

你会被提示选取需要的特性。

bash
pipflow CLI v0.4.0
+import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=JSON.parse('{"title":"命令行界面","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cli.md","filePath":"guide/cli.md","lastUpdated":1702347208000}'),p={name:"guide/cli.md"},o=l(`

命令行界面

CLI (@pipflow/cli) 是一个全局安装的 npm 包,提供了终端里的 pipflow 命令。你可以通过 pipflow create 快速搭建一个新项目,然后运行 pipflow dev 进行便捷开发。下面我们来深入介绍每个命令的使用。

温馨提示

你也可以在终端里使用 pw 命令。它是 pipflow 命令的缩写,由 pipflow 的首尾字母组合而成。

创建项目

pipflow create

创建一个新项目。

使用

运行以下命令来创建一个新项目:

bash
pipflow create hello-world
pipflow create hello-world

你会被提示选取需要的特性。

bash
pipflow CLI v0.4.0
 ? Check the features needed for your project: (Press <space> to select, <a> to toggle
 all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Babel
@@ -168,7 +168,7 @@ import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=
 Options:
   -l, --list   List all tasks
   -T, --tasks  List all tasks
-  -h, --help   display help for command

pipflow server

启动一个本地HTTP服务器。它是基于 BrowserSync 的。
你可以在任何目录下运行该命令,无需其他配置。

使用

bash
pipflow server
pipflow server

选项

bash
 pipflow preview --help
+  -h, --help   display help for command

pipflow server

快速启动一个本地HTTP服务器,用于预览或演示单个 HTML 页面。它是基于 BrowserSync 实现的。

无需配置,可在任意目录启动服务器,同时也支持参数自定义,如端口、目录、是否监听文件变化、浏览器自动刷新等。

使用

bash
pipflow server
pipflow server

选项

bash
 pipflow preview --help
 
 Usage: pw server [options]
 
@@ -206,4 +206,4 @@ import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=
   --open               open browser on server start
   --no-open            not open browser on server start
   --no-notify          disable the notify element in browser
-  -h, --help           display help for command

pipflow-info

打印当前项目的运行环境信息。

使用

bash
pipflow info
pipflow info
`,52),e=[o];function t(c,r,E,y,F,i){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{C as __pageData,h as default}; + -h, --help display help for command

pipflow-info

打印当前项目的运行环境信息。

使用

bash
pipflow info
pipflow info
`,53),e=[o];function t(c,r,E,y,F,i){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{C as __pageData,h as default}; diff --git a/assets/guide_cli.md.cc1e1b7e.lean.js b/assets/guide_cli.md.b7fe1365.lean.js similarity index 68% rename from assets/guide_cli.md.cc1e1b7e.lean.js rename to assets/guide_cli.md.b7fe1365.lean.js index e0a44d2..bdda0be 100644 --- a/assets/guide_cli.md.cc1e1b7e.lean.js +++ b/assets/guide_cli.md.b7fe1365.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=JSON.parse('{"title":"命令行界面","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cli.md","filePath":"guide/cli.md","lastUpdated":1699711149000}'),p={name:"guide/cli.md"},o=l("",52),e=[o];function t(c,r,E,y,F,i){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{C as __pageData,h as default}; +import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const C=JSON.parse('{"title":"命令行界面","description":"","frontmatter":{},"headers":[],"relativePath":"guide/cli.md","filePath":"guide/cli.md","lastUpdated":1702347208000}'),p={name:"guide/cli.md"},o=l("",53),e=[o];function t(c,r,E,y,F,i){return a(),n("div",null,e)}const h=s(p,[["render",t]]);export{C as __pageData,h as default}; diff --git a/assets/guide_env-and-mode.md.ef70d3e8.js b/assets/guide_env-and-mode.md.457988dd.js similarity index 99% rename from assets/guide_env-and-mode.md.ef70d3e8.js rename to assets/guide_env-and-mode.md.457988dd.js index 7859a69..8baaa3a 100644 --- a/assets/guide_env-and-mode.md.ef70d3e8.js +++ b/assets/guide_env-and-mode.md.457988dd.js @@ -1,4 +1,4 @@ -import{_ as s,o as e,c as a,Q as o}from"./chunks/framework.e1e0b12f.js";const y=JSON.parse('{"title":"模式与环境变量","description":"","frontmatter":{},"headers":[],"relativePath":"guide/env-and-mode.md","filePath":"guide/env-and-mode.md","lastUpdated":1699711149000}'),n={name:"guide/env-and-mode.md"},p=o(`

模式与环境变量

模式

默认情况下,开发服务器 (dev 命令) 运行在 development (开发) 模式,而 build 命令则运行在 production (生产) 模式。

这意味着当执行 pipflow build 时,它会自动加载 .env.production 中可能存在的环境变量:

# .env.production
+import{_ as s,o as e,c as a,Q as o}from"./chunks/framework.e1e0b12f.js";const y=JSON.parse('{"title":"模式与环境变量","description":"","frontmatter":{},"headers":[],"relativePath":"guide/env-and-mode.md","filePath":"guide/env-and-mode.md","lastUpdated":1702347208000}'),n={name:"guide/env-and-mode.md"},p=o(`

模式与环境变量

模式

默认情况下,开发服务器 (dev 命令) 运行在 development (开发) 模式,而 build 命令则运行在 production (生产) 模式。

这意味着当执行 pipflow build 时,它会自动加载 .env.production 中可能存在的环境变量:

# .env.production
 APP_TITLE=App Title
# .env.production
 APP_TITLE=App Title

在你的应用中,你可以使用 process.env.APP_TITLE 渲染标题。

在某些情况下,若想在 pipflow build 时运行不同的模式来渲染不同的标题,你可以通过传递 --mode 选项标志来覆盖命令使用的默认模式。例如,如果你想在 staging (预发布)模式下构建应用:

bash
pipflow build --mode staging
pipflow build --mode staging

还需要新建一个 .env.staging 文件:

# .env.staging
 APP_TITLE=App Title (staging)
# .env.staging
diff --git a/assets/guide_env-and-mode.md.ef70d3e8.lean.js b/assets/guide_env-and-mode.md.457988dd.lean.js
similarity index 85%
rename from assets/guide_env-and-mode.md.ef70d3e8.lean.js
rename to assets/guide_env-and-mode.md.457988dd.lean.js
index ba89b1f..45b77b0 100644
--- a/assets/guide_env-and-mode.md.ef70d3e8.lean.js
+++ b/assets/guide_env-and-mode.md.457988dd.lean.js
@@ -1 +1 @@
-import{_ as s,o as e,c as a,Q as o}from"./chunks/framework.e1e0b12f.js";const y=JSON.parse('{"title":"模式与环境变量","description":"","frontmatter":{},"headers":[],"relativePath":"guide/env-and-mode.md","filePath":"guide/env-and-mode.md","lastUpdated":1699711149000}'),n={name:"guide/env-and-mode.md"},p=o("",27),l=[p];function c(t,d,i,r,v,E){return e(),a("div",null,l)}const h=s(n,[["render",c]]);export{y as __pageData,h as default};
+import{_ as s,o as e,c as a,Q as o}from"./chunks/framework.e1e0b12f.js";const y=JSON.parse('{"title":"模式与环境变量","description":"","frontmatter":{},"headers":[],"relativePath":"guide/env-and-mode.md","filePath":"guide/env-and-mode.md","lastUpdated":1702347208000}'),n={name:"guide/env-and-mode.md"},p=o("",27),l=[p];function c(t,d,i,r,v,E){return e(),a("div",null,l)}const h=s(n,[["render",c]]);export{y as __pageData,h as default};
diff --git a/assets/guide_help.md.f61c126f.js b/assets/guide_help.md.f61c126f.js
deleted file mode 100644
index a52fe27..0000000
--- a/assets/guide_help.md.f61c126f.js
+++ /dev/null
@@ -1 +0,0 @@
-import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/help.md","filePath":"guide/help.md","lastUpdated":1699711149000}'),i={name:"guide/help.md"},l=o('

常见问题

安装依赖时间过长

  1. 设置 .mpmrc

  2. 使用 cnpm

我把部分依赖包抽离到外部,如果项目中不使用的话,可以直接删除。

  1. 图片压缩 删除package.json中的 gulp-imagemin 依赖 设置 imageMinify 为 false

安装依赖失败

经常碰到安装依赖失败,多数是因为网络原因:很多包将源码托管在 s3 服务器上,国内可能会被墙。

',7),r=[l];function c(d,n,s,p,_,h){return a(),t("div",null,r)}const f=e(i,[["render",c]]);export{u as __pageData,f as default}; diff --git a/assets/guide_help.md.f61c126f.lean.js b/assets/guide_help.md.f61c126f.lean.js deleted file mode 100644 index 8da3082..0000000 --- a/assets/guide_help.md.f61c126f.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"guide/help.md","filePath":"guide/help.md","lastUpdated":1699711149000}'),i={name:"guide/help.md"},l=o("",7),r=[l];function c(d,n,s,p,_,h){return a(),t("div",null,r)}const f=e(i,[["render",c]]);export{u as __pageData,f as default}; diff --git a/assets/guide_index.md.da7ed5a6.js b/assets/guide_index.md.df62155d.js similarity index 99% rename from assets/guide_index.md.da7ed5a6.js rename to assets/guide_index.md.df62155d.js index 1d50f02..35a9427 100644 --- a/assets/guide_index.md.da7ed5a6.js +++ b/assets/guide_index.md.df62155d.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as o,Q as p}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1699711149000}'),l={name:"guide/index.md"},n=p(`

开始

总览

pipflow (pipe-workflow) 是一个基于gulp的前端开发工作流。它内置了诸如合并、编译、打包、压缩等功能,极大地简化了前端开发流程。它提供了一组开箱即用的gulp任务和功能,开发者无需从零开始配置就可以立即启动前端项目的开发。

pipflow的主要功能包括:

  • HTML模板渲染 - 内置5款流行的模板引擎,开箱即用
  • CSS预处理 - 支持LESS/SASS(SCSS)/Stylus,自动添加浏览器前缀,压缩等
  • JavaScript语法转换、合并、压缩、校验、兼容老版本浏览器
  • 图片优化 - 无损压缩图片,生成雪碧图
  • Sourcemap和文件指纹 - 更容易调试和版本控制
  • 本地开发服务器 - 支持HTTPS和浏览器同步测试
  • 文件监视 - 自动检测文件变动并重新编译、合并、刷新页面
  • 自定义任务 - 可以扩展已有任务,满足各种需求

通过pipflow,开发者可以专注于代码编写,无需浪费时间在重复的工程配置上。它使用简单的命令就可以完成复杂的前端构建工作,并标准化了构建流程,极大地提升了项目之间的一致性和开发效率。

💡 温馨说明

简单易用和预设功能,使其成为基于gulp工作流的理想选择。

搭建 pipflow 项目

兼容性注意

pipflow 需要 Node.js 版本 14.13+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

运行 create 命令创建新项目:

bash
pipflow create my-project
pipflow create my-project

然后按照提示操作即可! 具体参数说明请参见 这里

命令行界面

如果在本机全局安装了 @pipflow/cli,进入项目根目录后,可以直接运行 pipflow dev 即可启动当前项目。
下面是通过脚手架创建的 pipflow 项目中默认的 npm scripts:

json
{
+import{_ as s,o as a,c as o,Q as p}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1702347208000}'),l={name:"guide/index.md"},n=p(`

开始

总览

pipflow (pipe-workflow) 是一个基于gulp的前端开发工作流。它内置了诸如合并、编译、打包、压缩等功能,极大地简化了前端开发流程。它提供了一组开箱即用的gulp任务和功能,开发者无需从零开始配置就可以立即启动前端项目的开发。

pipflow的主要功能包括:

  • HTML模板渲染 - 内置5款流行的模板引擎,开箱即用
  • CSS预处理 - 支持LESS/SASS(SCSS)/Stylus,自动添加浏览器前缀,压缩等
  • JavaScript语法转换、合并、压缩、校验、兼容老版本浏览器
  • 图片优化 - 无损压缩图片,生成雪碧图
  • Sourcemap和文件指纹 - 更容易调试和版本控制
  • 本地开发服务器 - 支持HTTPS和浏览器同步测试
  • 文件监视 - 自动检测文件变动并重新编译、合并、刷新页面
  • 自定义任务 - 可以扩展已有任务,满足各种需求

通过pipflow,开发者可以专注于代码编写,无需浪费时间在重复的工程配置上。它使用简单的命令就可以完成复杂的前端构建工作,并标准化了构建流程,极大地提升了项目之间的一致性和开发效率。

💡 温馨说明

简单易用和预设功能,使其成为基于gulp工作流的理想选择。

搭建 pipflow 项目

兼容性注意

pipflow 需要 Node.js 版本 14.13+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

运行 create 命令创建新项目:

bash
pipflow create my-project
pipflow create my-project

然后按照提示操作即可! 具体参数说明请参见 这里

命令行界面

如果在本机全局安装了 @pipflow/cli,进入项目根目录后,可以直接运行 pipflow dev 即可启动当前项目。
下面是通过脚手架创建的 pipflow 项目中默认的 npm scripts:

json
{
   "scripts": {
     "dev": "pipflow dev", // 启动开发服务器,\`pipflow dev\`或\`pw dev\`
     "build": "pipflow build", // 为生产环境构建产物
diff --git a/assets/guide_index.md.da7ed5a6.lean.js b/assets/guide_index.md.df62155d.lean.js
similarity index 84%
rename from assets/guide_index.md.da7ed5a6.lean.js
rename to assets/guide_index.md.df62155d.lean.js
index ba3bb02..53cadb8 100644
--- a/assets/guide_index.md.da7ed5a6.lean.js
+++ b/assets/guide_index.md.df62155d.lean.js
@@ -1 +1 @@
-import{_ as s,o as a,c as o,Q as p}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1699711149000}'),l={name:"guide/index.md"},n=p("",18),e=[n];function t(c,r,i,d,E,u){return a(),o("div",null,e)}const q=s(l,[["render",t]]);export{h as __pageData,q as default};
+import{_ as s,o as a,c as o,Q as p}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"开始","description":"","frontmatter":{},"headers":[],"relativePath":"guide/index.md","filePath":"guide/index.md","lastUpdated":1702347208000}'),l={name:"guide/index.md"},n=p("",18),e=[n];function t(c,r,i,d,E,u){return a(),o("div",null,e)}const q=s(l,[["render",t]]);export{h as __pageData,q as default};
diff --git a/assets/guide_task-assets.md.6a825859.js b/assets/guide_task-assets.md.6a825859.js
new file mode 100644
index 0000000..4d3ecb4
--- /dev/null
+++ b/assets/guide_task-assets.md.6a825859.js
@@ -0,0 +1,13 @@
+import{_ as s,o as a,c as e,Q as o}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"静态资源任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-assets.md","filePath":"guide/task-assets.md","lastUpdated":1702347208000}'),n={name:"guide/task-assets.md"},l=o(`

静态资源任务

任务类型为 staticimage

静态资源包含常见的图像、媒体和字体文件等。如果不想处理这些静态资源文件,你可以将它们放在 public 目录下。

任务流程

  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 压缩图片 - 基于 imagemin 压缩图片
  • 生成文件hash及manifest文件

图片压缩

由于图片压缩是一项耗时的一次性任务,且 gulp-imagemin 插件安装依赖经常失败(国内环境)。所以 pipflow 将 压缩图片作为一个可选项。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

关于图片压缩配置,你可以为所有静态任务统一配置,也可以单独配置某个静态任务。

  1. 统一配置项 build.imageMinify , 具体请看 这里
  2. 单独任务配置项 minify
ts
ImageMinifyOptions : boolean | {
+  plugins?: ImageMinifyPlugin[]
+  options?: {
+    verbose?: boolean
+    silent?: boolean
+  }
+}
ImageMinifyOptions : boolean | {
+  plugins?: ImageMinifyPlugin[]
+  options?: {
+    verbose?: boolean
+    silent?: boolean
+  }
+}

gulp-imagemin 插件在压缩图片过程中会自动过滤非图片文件。 具体配置请点击 这里

🚨 提醒

gulp-imagemin 只能安装 <=7 的版本,8及以上版本仅支持 esModule 模块化.

`,12),p=[l];function c(t,i,r,d,E,g){return a(),e("div",null,p)}const u=s(n,[["render",c]]);export{m as __pageData,u as default}; diff --git a/assets/guide_task-assets.md.6a825859.lean.js b/assets/guide_task-assets.md.6a825859.lean.js new file mode 100644 index 0000000..094954d --- /dev/null +++ b/assets/guide_task-assets.md.6a825859.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as e,Q as o}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"静态资源任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-assets.md","filePath":"guide/task-assets.md","lastUpdated":1702347208000}'),n={name:"guide/task-assets.md"},l=o("",12),p=[l];function c(t,i,r,d,E,g){return a(),e("div",null,p)}const u=s(n,[["render",c]]);export{m as __pageData,u as default}; diff --git a/assets/guide_task-assets.md.f8abe48e.js b/assets/guide_task-assets.md.f8abe48e.js deleted file mode 100644 index be9598c..0000000 --- a/assets/guide_task-assets.md.f8abe48e.js +++ /dev/null @@ -1,23 +0,0 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"静态资源","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-assets.md","filePath":"guide/task-assets.md","lastUpdated":1699711149000}'),p={name:"guide/task-assets.md"},o=l(`

静态资源

静态文件任务

图片任务

图片压缩

由于图片压缩是一个耗时任务,且 gulp-imagemin 插件安装依赖经常失败(国内环境)。鉴于此会影响整个工程的安装运行,所以 pipflow 并未内置图片压缩功能,如果需要则手动安装依赖并引入插件即可。

具体步骤如下:

  1. 安装 gulp-imagemin 依赖
shell
npm install -D gulp-imagemin@7
npm install -D gulp-imagemin@7

注意

gulp-imagemin 只能安装 <=7 的版本,8及以上版本仅支持 esModule 模块化.

  1. pipflow.config.js 中找到当前任务,并加入以下代码
js
const imagemin = require('gulp-imagemin')
-
-module.exports = {
-  tasks: [
-    {
-      type: 'assets',
-      plugins: [
-        imagemin(/* options */)
-      ]
-    }
-  ]
-}
const imagemin = require('gulp-imagemin')
-
-module.exports = {
-  tasks: [
-    {
-      type: 'assets',
-      plugins: [
-        imagemin(/* options */)
-      ]
-    }
-  ]
-}

gulp-imagemin 插件在压缩图片过程中会自动过滤非图片文件。 请点击查看文档

`,12),e=[o];function t(c,r,i,E,y,d){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{m as __pageData,u as default}; diff --git a/assets/guide_task-assets.md.f8abe48e.lean.js b/assets/guide_task-assets.md.f8abe48e.lean.js deleted file mode 100644 index 116dda3..0000000 --- a/assets/guide_task-assets.md.f8abe48e.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"静态资源","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-assets.md","filePath":"guide/task-assets.md","lastUpdated":1699711149000}'),p={name:"guide/task-assets.md"},o=l("",12),e=[o];function t(c,r,i,E,y,d){return a(),n("div",null,e)}const u=s(p,[["render",t]]);export{m as __pageData,u as default}; diff --git a/assets/guide_task-html.md.77c7b164.js b/assets/guide_task-html.md.5a49ced7.js similarity index 72% rename from assets/guide_task-html.md.77c7b164.js rename to assets/guide_task-html.md.5a49ced7.js index 5aaf956..ffd45d8 100644 --- a/assets/guide_task-html.md.77c7b164.js +++ b/assets/guide_task-html.md.5a49ced7.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"HTML 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-html.md","filePath":"guide/task-html.md","lastUpdated":1699711149000}'),p={name:"guide/task-html.md"},e=l(`

HTML 任务

处理流程

  • 环境变量处理 - 环境变量在构建时会被静态替换
  • 模板渲染 - 渲染HTML模板引擎,支持 Pug, EJS, Handlebars, Nunjucks, art-template
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 内容压缩 - 基于 html-minifier-terser 的内容压缩
  • 资源文件指纹 - 将构建后通过生成的 manifest.json 中包含 hash 过的资源文件版本的映射,进行引入链接的替换

环境变量处理

html内容中的以 process.env.XXX 写入的环境变量将会被静态替换。

模板渲染

pipflow 内置了5款流行的模板引擎,它们曾经都是主流 🤪。让我们来逐一介绍它们:

  1. Pug:

    • 简介: Pug是一种高度可读性的模板引擎,具有简洁的语法和强大的功能。它采用缩进和标签语法,可以快速生成HTML代码。
    • 文档: Pug文档gulp-pug 插件文档
  2. EJS:

    • 简介: EJS(Embedded JavaScript)是一种简单而灵活的模板引擎,可将JavaScript代码嵌入到模板中。它允许您动态生成HTML页面。
    • 文档: EJS文档gulp-ejs 插件文档
  3. Handlebars:

    • 简介: Handlebars是一种语法简洁的模板引擎,它使用标签和表达式来生成HTML。它具有易学易用的特点,非常适合快速构建静态页面。
    • 文档: Handlebars文档gulp-hb 插件文档
  4. Nunjucks:

    • 简介: Nunjucks是一款功能强大的模板引擎,它支持条件语句、循环和继承等高级功能。它被广泛用于JavaScript开发中的模板渲染。
    • 文档: Nunjucks文档gulp-nunjucks 插件文档
  5. art-template:

    • 简介: art-template是一种快速、简洁而且可扩展的模板引擎。它支持JavaScript语法和自定义扩展,非常适合前端开发和服务器端渲染。
    • 它同时支持两种模板语法。原始语法兼容 EJSUnderscoreLoDash 模板,标准语法类似 Mustache
    • 文档: art-template文档gulp-art-tpl 插件文档
    • 个人推荐: 功能强大,使用简单

这些模板引擎在过去都很流行,每一款都有自己独特的特点和用法。您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目。

渲染配置项

示例

pipflow内置的模板引擎中,Handlebars 的使用相对复杂一些,那么我们来写一个 Handlebars 代码片段复用的示例。

模板文件:

html
<!-- ./src/index.html -->
+import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"HTML 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-html.md","filePath":"guide/task-html.md","lastUpdated":1702347208000}'),p={name:"guide/task-html.md"},e=l(`

HTML 任务

任务类型为 html

任务流程

  • 环境变量处理 - 环境变量在构建时会被静态替换
  • 模板渲染 - 渲染HTML模板引擎,支持 Pug, EJS, Handlebars, Nunjucks, art-template
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 内容压缩 - 基于 html-minifier-terser 的内容压缩
  • 资源文件指纹 - 将构建后通过生成的 manifest.json 中包含 hash 过的资源文件版本的映射,进行引入链接的替换

环境变量处理

html内容中的以 process.env.XXX 写入的环境变量将会被静态替换。

模板渲染

pipflow 内置了5款流行的模板引擎,它们曾经都是主流 🤪。让我们来逐一介绍它们:

  1. Pug:

    • 简介: Pug是一种高度可读性的模板引擎,具有简洁的语法和强大的功能。它采用缩进和标签语法,可以快速生成HTML代码。
    • 文档: Pug文档gulp-pug 插件文档
  2. EJS:

    • 简介: EJS(Embedded JavaScript)是一种简单而灵活的模板引擎,可将JavaScript代码嵌入到模板中。它允许您动态生成HTML页面。
    • 文档: EJS文档gulp-ejs 插件文档
  3. Handlebars:

    • 简介: Handlebars是一种语法简洁的模板引擎,它使用标签和表达式来生成HTML。它具有易学易用的特点,非常适合快速构建静态页面。
    • 文档: Handlebars文档gulp-hb 插件文档
  4. Nunjucks:

    • 简介: Nunjucks是一款功能强大的模板引擎,它支持条件语句、循环和继承等高级功能。它被广泛用于JavaScript开发中的模板渲染。
    • 文档: Nunjucks文档gulp-nunjucks 插件文档
  5. art-template:

    • 简介: art-template是一种快速、简洁而且可扩展的模板引擎。它支持JavaScript语法和自定义扩展,非常适合前端开发和服务器端渲染。
    • 它同时支持两种模板语法。原始语法兼容 EJSUnderscoreLoDash 模板,标准语法类似 Mustache
    • 文档: art-template文档gulp-art-tpl 插件文档
    • 个人推荐: 功能强大,使用简单

这些模板引擎在过去都很流行,每一款都有自己独特的特点和用法。您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目。

渲染配置项

示例

pipflow内置的模板引擎中,Handlebars 的使用相对复杂一些,那么我们来写一个 Handlebars 代码片段复用的示例。

模板文件:

html
<!-- ./src/index.html -->
 <html>
   <head>
     <title>pipflow</title>
@@ -78,4 +78,4 @@ import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=
   collapseBooleanAttributes: true,
   minifyJS: true,
   minifyCSS: true
-}

你可以通过 build.htmlMinify 配置项来指定压缩选项。 参见 这里

`,21),o=[e];function t(r,c,i,E,y,d){return a(),n("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default}; +}

你可以通过 build.htmlMinify 配置项来指定压缩选项。 参见 这里

`,22),o=[e];function t(r,c,i,E,y,d){return a(),n("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default}; diff --git a/assets/guide_task-html.md.77c7b164.lean.js b/assets/guide_task-html.md.5a49ced7.lean.js similarity index 69% rename from assets/guide_task-html.md.77c7b164.lean.js rename to assets/guide_task-html.md.5a49ced7.lean.js index b38e58f..269c9af 100644 --- a/assets/guide_task-html.md.77c7b164.lean.js +++ b/assets/guide_task-html.md.5a49ced7.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"HTML 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-html.md","filePath":"guide/task-html.md","lastUpdated":1699711149000}'),p={name:"guide/task-html.md"},e=l("",21),o=[e];function t(r,c,i,E,y,d){return a(),n("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default}; +import{_ as s,o as a,c as n,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"HTML 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-html.md","filePath":"guide/task-html.md","lastUpdated":1702347208000}'),p={name:"guide/task-html.md"},e=l("",22),o=[e];function t(r,c,i,E,y,d){return a(),n("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default}; diff --git a/assets/guide_task-more.md.2339473a.js b/assets/guide_task-more.md.2339473a.js deleted file mode 100644 index 0ffd916..0000000 --- a/assets/guide_task-more.md.2339473a.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const F=JSON.parse('{"title":"其他任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-more.md","filePath":"guide/task-more.md","lastUpdated":1699711149000}'),o={name:"guide/task-more.md"},l=p('

其他任务

ZIP压缩任务 (archive)

bash
pipflow pack [options]\n\n# example\npipflow pack dist/ dist.zip\n# 将 `dist/` 目录打包, 压缩包 `dist.zip`在项目的根目录\n\npipflow pack public/favicon.ico src/ dist/source.zip\n# 将 `ico`文件 和 `src/` 目录打包, 压缩包 `source.zip`在dist目录中
pipflow pack [options]\n\n# example\npipflow pack dist/ dist.zip\n# 将 `dist/` 目录打包, 压缩包 `dist.zip`在项目的根目录\n\npipflow pack public/favicon.ico src/ dist/source.zip\n# 将 `ico`文件 和 `src/` 目录打包, 压缩包 `source.zip`在dist目录中

options

最后一项是打包输出的路径,其他项目是打包的目标路径。

',5),e=[l];function t(c,i,r,d,y,E){return a(),n("div",null,e)}const _=s(o,[["render",t]]);export{F as __pageData,_ as default}; diff --git a/assets/guide_task-more.md.2339473a.lean.js b/assets/guide_task-more.md.2339473a.lean.js deleted file mode 100644 index 9bf3bd2..0000000 --- a/assets/guide_task-more.md.2339473a.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const F=JSON.parse('{"title":"其他任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-more.md","filePath":"guide/task-more.md","lastUpdated":1699711149000}'),o={name:"guide/task-more.md"},l=p("",5),e=[l];function t(c,i,r,d,y,E){return a(),n("div",null,e)}const _=s(o,[["render",t]]);export{F as __pageData,_ as default}; diff --git a/assets/guide_task-more.md.a1052ad8.js b/assets/guide_task-more.md.a1052ad8.js new file mode 100644 index 0000000..0d9f36e --- /dev/null +++ b/assets/guide_task-more.md.a1052ad8.js @@ -0,0 +1,53 @@ +import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"其他任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-more.md","filePath":"guide/task-more.md","lastUpdated":1702347208000}'),l={name:"guide/task-more.md"},o=p(`

其他任务

下面是一些辅助任务,用于复制、压缩 和 删除 文件及目录等。

copy 复制任务

copy 任务用于复制文件和目录。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'copy',
+      input: 'src/assets/**/*',
+      dest: 'dist/assets/' 
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'copy',
+      input: 'src/assets/**/*',
+      dest: 'dist/assets/' 
+    }
+  ]
+}

这会将 src/assets/ 目录下的所有文件复制到 dist/assets/

copy任务支持 glob 写法来匹配文件,可以配置 inputdest 路径来定义复制源和输出目标。如果源文件是目录,会将整个目录复制过去。

remove 删除任务

remove 任务用于删除文件和目录。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'remove',
+      input: 'dist/**/*.map'
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'remove',
+      input: 'dist/**/*.map'
+    }
+  ]
+}

这会删除 dist 目录下所有的 .map 文件。

input 同样支持 glob 写法。

archive 压缩任务

archive 任务用于文件和目录的压缩和打包。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'archive',
+      input: 'dist/**/*',
+      dest: 'release.zip'
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'archive',
+      input: 'dist/**/*',
+      dest: 'release.zip'
+    }
+  ]
+}

这会将 dist 目录下的所有文件和目录打包压缩成 release.zip

`,16),e=[o];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const k=s(l,[["render",c]]);export{u as __pageData,k as default}; diff --git a/assets/guide_task-more.md.a1052ad8.lean.js b/assets/guide_task-more.md.a1052ad8.lean.js new file mode 100644 index 0000000..0761c10 --- /dev/null +++ b/assets/guide_task-more.md.a1052ad8.lean.js @@ -0,0 +1 @@ +import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"其他任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-more.md","filePath":"guide/task-more.md","lastUpdated":1702347208000}'),l={name:"guide/task-more.md"},o=p("",16),e=[o];function c(t,r,i,E,y,d){return a(),n("div",null,e)}const k=s(l,[["render",c]]);export{u as __pageData,k as default}; diff --git a/assets/guide_task-script.md.f1baca51.js b/assets/guide_task-script.md.87f4e01c.js similarity index 82% rename from assets/guide_task-script.md.f1baca51.js rename to assets/guide_task-script.md.87f4e01c.js index c89bff5..67250c8 100644 --- a/assets/guide_task-script.md.f1baca51.js +++ b/assets/guide_task-script.md.87f4e01c.js @@ -1,4 +1,4 @@ -import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"script 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-script.md","filePath":"guide/task-script.md","lastUpdated":1699711149000}'),l={name:"guide/task-script.md"},e=p(`

script 任务

处理流程

  • 环境变量处理 - 环境变量注入
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • babel转译
  • 压缩混淆 - 基于 terser 压缩混淆
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

1. 字符串通配符

js
{
+import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"script 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-script.md","filePath":"guide/task-script.md","lastUpdated":1702347208000}'),l={name:"guide/task-script.md"},e=p(`

script 任务

任务类型为 script

任务流程

  • 环境变量处理 - 环境变量注入
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • babel转译
  • 压缩混淆 - 基于 terser 压缩混淆
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

1. 字符串通配符

js
{
   input: './src/scripts/**/*.{js,mjs}'
 }
{
   input: './src/scripts/**/*.{js,mjs}'
@@ -36,4 +36,4 @@ import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=
 dist/scripts/index.js
 dist/scripts/pages.js
dist/scripts/comm/index.js
 dist/scripts/index.js
-dist/scripts/pages.js

babel 转译

如果开启 babel 转译,则使用 webpack 进行 Javascript 构建。

你可以通过修改项目中的 babel.config.js 文件来配置 babel 的转译选项。或者调整 .browserslistrc 修改支持的目标浏览器。

terser

Javascript 文件是基于 terser 进行压缩混淆,配置项请点 这里

具体配置可以查阅 terser

`,19),o=[e];function c(t,r,i,E,d,y){return a(),n("div",null,o)}const b=s(l,[["render",c]]);export{u as __pageData,b as default}; +dist/scripts/pages.js

babel 转译

如果开启 babel 转译,则使用 webpack 进行 Javascript 构建。

你可以通过修改项目中的 babel.config.js 文件来配置 babel 的转译选项。或者调整 .browserslistrc 修改支持的目标浏览器。

terser

Javascript 文件是基于 terser 进行压缩混淆,配置项请点 这里

具体配置可以查阅 terser

`,20),o=[e];function c(t,r,i,E,d,y){return a(),n("div",null,o)}const b=s(l,[["render",c]]);export{u as __pageData,b as default}; diff --git a/assets/guide_task-script.md.f1baca51.lean.js b/assets/guide_task-script.md.87f4e01c.lean.js similarity index 70% rename from assets/guide_task-script.md.f1baca51.lean.js rename to assets/guide_task-script.md.87f4e01c.lean.js index d17af4a..d0df252 100644 --- a/assets/guide_task-script.md.f1baca51.lean.js +++ b/assets/guide_task-script.md.87f4e01c.lean.js @@ -1 +1 @@ -import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"script 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-script.md","filePath":"guide/task-script.md","lastUpdated":1699711149000}'),l={name:"guide/task-script.md"},e=p("",19),o=[e];function c(t,r,i,E,d,y){return a(),n("div",null,o)}const b=s(l,[["render",c]]);export{u as __pageData,b as default}; +import{_ as s,o as a,c as n,Q as p}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"script 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-script.md","filePath":"guide/task-script.md","lastUpdated":1702347208000}'),l={name:"guide/task-script.md"},e=p("",20),o=[e];function c(t,r,i,E,d,y){return a(),n("div",null,o)}const b=s(l,[["render",c]]);export{u as __pageData,b as default}; diff --git a/assets/guide_task-server.md.3c7b4701.js b/assets/guide_task-server.md.3c7b4701.js new file mode 100644 index 0000000..0d1d4d8 --- /dev/null +++ b/assets/guide_task-server.md.3c7b4701.js @@ -0,0 +1 @@ +import{_ as e,o as s,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const k=JSON.parse('{"title":"server 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-server.md","filePath":"guide/task-server.md","lastUpdated":1702347208000}'),o={name:"guide/task-server.md"},r=p('

server 任务

任务类型为 server

pipflowserver 服务是基于 browser-sync 实现的。无需配置,运行简单命令即可快速启动本地开发服务器。

本地开发服务

bash
pipflow dev
pipflow dev

本地开发服务通过 pipflow dev 命令启动,提供了文件监听、浏览器自动刷新、CSS 注入等功能,方便项目开发和调试。

如果是通过 pipflow create 创建的项目,无需任何配置,直接执行 npm run dev 即可启动开发服务器。

本地预览服务

bash
pipflow task server --preview
pipflow task server --preview

本地预览服务通过 pipflow task server --preview 启动,用于预览生产环境构建后的静态资源。

基于 pipflow 创建的项目,可以通过 npm run preview 快速预览构建产物 (服务器目录默认为构建目录)。

快速预览服务

bash
pipflow server
pipflow server

快速预览服务通过 pipflow server 命令启动,用于快速预览或演示单个 HTML 页面。

全局安装 @pipflow/cli 后,无需配置,可在任意目录启动服务器,同时也支持参数自定义,如端口、目录、是否监听文件变化、浏览器自动刷新等。

提示

以上 3 种服务器已覆盖大部分场景,一般无需在配置文件中自行配置 server 任务。

',16),l=[r];function c(t,n,i,d,v,h){return s(),a("div",null,l)}const y=e(o,[["render",c]]);export{k as __pageData,y as default}; diff --git a/assets/guide_task-server.md.3c7b4701.lean.js b/assets/guide_task-server.md.3c7b4701.lean.js new file mode 100644 index 0000000..90665df --- /dev/null +++ b/assets/guide_task-server.md.3c7b4701.lean.js @@ -0,0 +1 @@ +import{_ as e,o as s,c as a,Q as p}from"./chunks/framework.e1e0b12f.js";const k=JSON.parse('{"title":"server 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-server.md","filePath":"guide/task-server.md","lastUpdated":1702347208000}'),o={name:"guide/task-server.md"},r=p("",16),l=[r];function c(t,n,i,d,v,h){return s(),a("div",null,l)}const y=e(o,[["render",c]]);export{k as __pageData,y as default}; diff --git a/assets/guide_task-style.md.5c05796b.js b/assets/guide_task-style.md.5c05796b.js deleted file mode 100644 index 93bb77a..0000000 --- a/assets/guide_task-style.md.5c05796b.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"style 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-style.md","filePath":"guide/task-style.md","lastUpdated":1699711149000}'),s={name:"guide/task-style.md"},r=o('

style 任务

处理流程

CSS 预处理器

postcss集成

remtopx

pxtorem

pxtoview

',7),i=[r];function l(c,h,d,n,p,_){return a(),t("div",null,i)}const x=e(s,[["render",l]]);export{u as __pageData,x as default}; diff --git a/assets/guide_task-style.md.5c05796b.lean.js b/assets/guide_task-style.md.5c05796b.lean.js deleted file mode 100644 index 7f382b1..0000000 --- a/assets/guide_task-style.md.5c05796b.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o as a,c as t,Q as o}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"style 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-style.md","filePath":"guide/task-style.md","lastUpdated":1699711149000}'),s={name:"guide/task-style.md"},r=o("",7),i=[r];function l(c,h,d,n,p,_){return a(),t("div",null,i)}const x=e(s,[["render",l]]);export{u as __pageData,x as default}; diff --git a/assets/guide_task-style.md.90987ce7.js b/assets/guide_task-style.md.90987ce7.js new file mode 100644 index 0000000..da85c47 --- /dev/null +++ b/assets/guide_task-style.md.90987ce7.js @@ -0,0 +1,159 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"style 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-style.md","filePath":"guide/task-style.md","lastUpdated":1702347208000}'),p={name:"guide/task-style.md"},o=l(`

style 任务

任务类型为 style

style 任务用于处理 CSS 资源,主要包含 CSS 预处理、兼容性处理、压缩等功能。

任务流程

  • 环境变量替换 - 静态替换 env 对应的字符串
  • 别名替换 - 静态替换 alias 对应的字符串
  • CSS 预处理器编译
  • 自定义插件处理
  • postcss 处理 - 包含 属性兼容性前缀(autoprefixer)、压缩混淆(cssnano)等
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

js
// 1. 字符串
+{
+  input: './src/styles/**/*.{css,scss}'
+}
+
+// 2. 数组方式
+{
+  input: [
+    './src/styles/comm.css',
+    './src/styles/index.css',
+    './src/styles/page.css',
+  ]
+}
+
+// 3. 对象方式
+{
+  input: {
+    'comm/index': [
+      './src/styles/base.css',
+      './src/styles/utils.css',
+    ],
+    'index': './src/styles/index.css',
+    'pages': './src/styles/pages/*.css'
+  }
+}
// 1. 字符串
+{
+  input: './src/styles/**/*.{css,scss}'
+}
+
+// 2. 数组方式
+{
+  input: [
+    './src/styles/comm.css',
+    './src/styles/index.css',
+    './src/styles/page.css',
+  ]
+}
+
+// 3. 对象方式
+{
+  input: {
+    'comm/index': [
+      './src/styles/base.css',
+      './src/styles/utils.css',
+    ],
+    'index': './src/styles/index.css',
+    'pages': './src/styles/pages/*.css'
+  }
+}

CSS 预处理器

pipflow 支持 sass (scss), less, stylus 三种最常见的 CSS 预处理器。你只需在 style 类型任务的 compiler 属性中配置对应的预处理器即可。

为了编码方便,你还可以在转译时注入额外代码。

下面我们以 scss 为例进行简单配置:

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    // ... 其他任务
+    {
+      type: 'style',
+      input: './src/styles/**/*.scss',
+      compiler: 'sass',
+      compilerOptions: {
+        // 注入额外代码
+        additionalData: \`@import './comm/variables';\\n$--primary-color: blue;\`,
+        // sass 选项
+        preprocessorOptions: {
+          includePaths: ['node_modules'], //支持加载npm包
+        }
+      }
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    // ... 其他任务
+    {
+      type: 'style',
+      input: './src/styles/**/*.scss',
+      compiler: 'sass',
+      compilerOptions: {
+        // 注入额外代码
+        additionalData: \`@import './comm/variables';\\n$--primary-color: blue;\`,
+        // sass 选项
+        preprocessorOptions: {
+          includePaths: ['node_modules'], //支持加载npm包
+        }
+      }
+    }
+  ]
+}

additionalData 选项

所有预处理器都支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

各预处理器使用详见:

PostCSS 插件

PostCSS 内置了众多插件用来转换 CSS, 你只需在项目的 postcss.config.js 文件中配置即可。目前 pipflow 已内置浏览器兼容性前缀(postcss-preset-env)和压缩优化(cssnano)插件。

这里列出一些常用的插件和用法示例,更多插件请参见 这里

pxtorem

px 单位转换为 rem 单位。 更多配置请参见 这里

js
// postcss.config.js
+module.exports = {
+  plugins: [
+    require('postcss-pxtorem')({
+      rootValue: 16,
+      propList: ['*'],
+      minPixelValue: 12,
+      exclude: /node_modules/i,
+    })
+  ]
+}
// postcss.config.js
+module.exports = {
+  plugins: [
+    require('postcss-pxtorem')({
+      rootValue: 16,
+      propList: ['*'],
+      minPixelValue: 12,
+      exclude: /node_modules/i,
+    })
+  ]
+}

pxtoview

将CSS中的 px 单位转换为 vw、vh 等视口单位。 更多配置请参见 这里

js
const px2viewport = require('postcss-px-to-viewport')
+
+module.exports = {
+  plugins: [
+    require('postcss-px-to-viewport')({
+      viewportWidth: 375,
+      unitPrecision: 5,
+      viewportUnit: 'vw',
+      propList: ['*'],
+      selectorBlackList: ["ignore"],
+      minPixelValue: 1,
+      mediaQuery: false
+    })
+  ]
+}
const px2viewport = require('postcss-px-to-viewport')
+
+module.exports = {
+  plugins: [
+    require('postcss-px-to-viewport')({
+      viewportWidth: 375,
+      unitPrecision: 5,
+      viewportUnit: 'vw',
+      propList: ['*'],
+      selectorBlackList: ["ignore"],
+      minPixelValue: 1,
+      mediaQuery: false
+    })
+  ]
+}

with Tailwind CSS

项目中集成 Tailwind CSS。 具体配置请参见 这里

  1. 通过 npm 安装 tailwindcss 及其依赖项,并创建 tailwind.config.js 文件。
bash
npm install -D tailwindcss autoprefixer
+npx tailwindcss init
npm install -D tailwindcss autoprefixer
+npx tailwindcss init
  1. 配置 tailwind.config.js
js
/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: ["./src/**/*.{html,js}"],
+  theme: {
+    extend: {},
+  },
+  plugins: [],
+}
/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: ["./src/**/*.{html,js}"],
+  theme: {
+    extend: {},
+  },
+  plugins: [],
+}
  1. 配置 postcss.config.js
js
module.exports = {
+  plugins: [
+    require('tailwindcss'),
+    require('autoprefixer')
+  ],
+}
module.exports = {
+  plugins: [
+    require('tailwindcss'),
+    require('autoprefixer')
+  ],
+}
`,33),e=[o];function c(t,r,E,i,y,d){return n(),a("div",null,e)}const h=s(p,[["render",c]]);export{u as __pageData,h as default}; diff --git a/assets/guide_task-style.md.90987ce7.lean.js b/assets/guide_task-style.md.90987ce7.lean.js new file mode 100644 index 0000000..b9134cd --- /dev/null +++ b/assets/guide_task-style.md.90987ce7.lean.js @@ -0,0 +1 @@ +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"style 任务","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-style.md","filePath":"guide/task-style.md","lastUpdated":1702347208000}'),p={name:"guide/task-style.md"},o=l("",33),e=[o];function c(t,r,E,i,y,d){return n(),a("div",null,e)}const h=s(p,[["render",c]]);export{u as __pageData,h as default}; diff --git a/assets/guide_task-user.md.b35cd93b.js b/assets/guide_task-user.md.db078580.js similarity index 64% rename from assets/guide_task-user.md.b35cd93b.js rename to assets/guide_task-user.md.db078580.js index 994a606..25f638c 100644 --- a/assets/guide_task-user.md.b35cd93b.js +++ b/assets/guide_task-user.md.db078580.js @@ -1,5 +1,44 @@ -import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"自定义任务和流程","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-user.md","filePath":"guide/task-user.md","lastUpdated":1699711149000}'),p={name:"guide/task-user.md"},o=l(`

自定义任务和流程

扩展任务

对于已有的任务,如果不满足你的业务需求,你可以通过这个任务的 plugins 配置项来扩展当前任务。

比如,html 类型的任务默认处理流程会包含 模板引擎渲染、字符串内容替换、输出压缩、.... 等流程。如果你想在 html 类型任务中增加其他处理流程,可以通过 plugins 配置项来扩展任务。

示例: 在默认流程之外,动态插入一段html源码

js
const { defineConfig } = require('pipflow')
-const replace = require('gulp-replace')
+import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"自定义任务和流程","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-user.md","filePath":"guide/task-user.md","lastUpdated":1702347208000}'),p={name:"guide/task-user.md"},o=l(`

自定义任务和流程

扩展任务

对于已有的任务,如果不满足你的业务需求,你可以通过这个任务的 plugins 配置项来扩展当前任务。

例如,html 类型的任务默认处理流程包括 模板引擎渲染、字符串内容替换、资源文件指纹、输出压缩等流程。如果你想在 html 类型任务构建过程中增加其他处理流程,你可以这样配置:

比如在默认流程之外,动态插入一段 jquery外链源码

js
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const dom  = require('gulp-dom')
+
+module.exports = defineConfig({
+  tasks: [
+    {
+      type: 'html',
+      input: './src/**/*.html',
+      plugins: [
+        dom(function() {
+          return this.querySelectorAll('body')[0].insertAdjacentHTML(
+            'beforeend',
+            '<script src="https://unpkg.com/jquery/dist/jquery.js"></script>'
+          )
+        })
+      ]
+    }
+  ]
+})
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const dom  = require('gulp-dom')
+
+module.exports = defineConfig({
+  tasks: [
+    {
+      type: 'html',
+      input: './src/**/*.html',
+      plugins: [
+        dom(function() {
+          return this.querySelectorAll('body')[0].insertAdjacentHTML(
+            'beforeend',
+            '<script src="https://unpkg.com/jquery/dist/jquery.js"></script>'
+          )
+        })
+      ]
+    }
+  ]
+})

创建新任务

创建一个新任务非常简单,你只需要在配置文件 pipflow.config.jstasks 中增加一条任务项即可。

pipflow 的任务类型主要分为两大类:

  • 固定流程任务:内置了基础处理流程的任务。
  • 自定义流程任务:无内置流程,处理过程完全自主控制。

1. 创建固定流程任务

当任务类型不为 user 时为固定流程任务。

下面我们来创建一个使用 mustache 模板引擎(未内置) 的 html 类型任务。

js
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const mustache  = require('gulp-mustache')
 
 module.exports = defineConfig({
   tasks: [
@@ -7,12 +46,15 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       type: 'html',
       input: './src/**/*.html',
       plugins: [
-        // gulp-dom 插入代码
+        mustache({
+          title: 'Hello, Pipflow!',
+        })
       ]
     }
   ]
-})
const { defineConfig } = require('pipflow')
-const replace = require('gulp-replace')
+})
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const mustache  = require('gulp-mustache')
 
 module.exports = defineConfig({
   tasks: [
@@ -20,17 +62,20 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       type: 'html',
       input: './src/**/*.html',
       plugins: [
-        // gulp-dom 插入代码
+        mustache({
+          title: 'Hello, Pipflow!',
+        })
       ]
     }
   ]
-})

创建新任务

创建一个新任务非常简单,你只需要在配置文件pipflow.config.jstasks中增加一条任务项即可。

pipflow的任务类型主要分为两大类:

  • 固定流程任务:内置了基础的处理流程的任务。
  • 自定义流程任务:无内置流程,处理过程完全自主控制。

1. 固定流程任务

当任务类型不为 user 时为固定流程任务。

js
// html 其他模板引擎任务
// html 其他模板引擎任务

2. 自定义流程任务

当任务类型为 user 时为自定义流程任务。创建自定义流程任务的方式有两种:

  • plugins 方式
  • compiler 方式

这两种方式除了书写方式不同之外,没有其他区别。

2.1 plugins 方式

将处理流程写在 plugins 配置中。

js
// pipflow.config.js
+})

是不是非常简单?😀 😃 😄 😁 😆

2. 创建自定义流程任务

当任务类型为 user 时为自定义流程任务。创建自定义流程任务有两种方式:

  • plugins 方式
  • compiler 方式

这两种方式除了书写方式不同之外,没有其他区别。

2.1 plugins 方式

将处理流程写在 plugins 配置中。

js
// pipflow.config.js
 const gulp = require('gulp')
 const concat = require('gulp-concat')
 
 module.exports = {
   tasks: [
     {
+      name: 'build:css',
       type: 'user',
       plugins: [
         gulp.src('./src/**/*.css', { base: './src' }),
@@ -46,6 +91,7 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
 module.exports = {
   tasks: [
     {
+      name: 'build:css',
       type: 'user',
       plugins: [
         gulp.src('./src/**/*.css', { base: './src' }),
@@ -54,7 +100,7 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       ]
     }
   ]
-}

或者,你可以简化成如下形式

js
// pipflow.config.js
+}

或者,你可以简化为如下形式

js
// pipflow.config.js
 const concat = require('gulp-concat')
 
 module.exports = {
@@ -80,7 +126,7 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       ]
     }
   ]
-}

TIP

你如果配置了 input 属性,在gulp的处理过程中会自动增加文件的输入流和输出流。你只需要在plugins中配置处理流程所需要的插件即可。

2.2 compiler 方式

compiler 作为一个任务函数。它和定义一个gulp任务是一样的。

js
// pipflow.config.js
+}

TIP

如果配置了 input 属性,在gulp的处理过程中会自动增加文件的输入流和输出流。你只需要在plugins中配置处理流程所需要的插件即可。

2.2 compiler 方式

compiler 作为一个任务函数。它和定义一个gulp任务是一样的。

js
// pipflow.config.js
 const gulp = require('gulp')
 const concat = require('gulp-concat')
 
@@ -148,7 +194,7 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
       ]
     }
   ]
-})

入口说明

compose 任务中,input入口和其他类型任务有些不同,其 input 值是一个二维数组 string[][],数组的每一项是一个任务名。

input 的值转换后的结果:

js
series(parallel('任务名', ...), parallel(...), ...)
series(parallel('任务名', ...), parallel(...), ...)
  • 数组列表表示一个串联任务,其内部是通过 series 方法执行的。
  • 数组的子项表示一个并行任务,其内部是通过 parallel 方法执行的。
  1. 执行新任务,构建用于预发布环境的应用程序包。执行如下命令:
bash
pipflow task build:stag --mode=staging
pipflow task build:stag --mode=staging

为了方便发布,你可以在 package.jsonscripts 字段内添加 build:stag 脚本

json
{
+})

入口说明

compose 任务中,input入口和其他类型任务有些不同,其 input 值是一个二维数组 string[][],数组的每一项是一个任务名。

下面是 input 的值转换后的结果:

js
series(parallel('任务名', ...), parallel(...), ...)
series(parallel('任务名', ...), parallel(...), ...)
  • 数组列表表示一个串联任务,其内部是通过 series 方法执行的。
  • 数组的子项表示一个并行任务,其内部是通过 parallel 方法执行的。
  1. 执行新任务,构建用于预发布环境的应用程序包。执行如下命令:
bash
pipflow task build:stag --mode=staging
pipflow task build:stag --mode=staging

为了方便发布,你可以在 package.jsonscripts 字段内添加 build:stag 脚本

json
{
   "scripts": {
     "dev": "pipflow dev",
     "build": "pipflow build",
@@ -160,4 +206,4 @@ import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=
     "build": "pipflow build",
     "build:stag": "cross-env NODE_ENV=production pipflow task build:stag --mode=staging" 
   }
-}

TIP

如果当前主机的环境变量 NODE_ENV 未知或不为 production ,那么请在执行的命令前加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction

`,40),e=[o];function c(t,r,E,y,i,d){return n(),a("div",null,e)}const g=s(p,[["render",c]]);export{u as __pageData,g as default}; +}

TIP

如果当前主机的环境变量 NODE_ENV 未知或不为 production ,那么请在执行的命令前加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction

`,42),e=[o];function c(t,r,E,y,i,d){return n(),a("div",null,e)}const C=s(p,[["render",c]]);export{u as __pageData,C as default}; diff --git a/assets/guide_task-user.md.b35cd93b.lean.js b/assets/guide_task-user.md.db078580.lean.js similarity index 58% rename from assets/guide_task-user.md.b35cd93b.lean.js rename to assets/guide_task-user.md.db078580.lean.js index 4042a4d..5daa10b 100644 --- a/assets/guide_task-user.md.b35cd93b.lean.js +++ b/assets/guide_task-user.md.db078580.lean.js @@ -1 +1 @@ -import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"自定义任务和流程","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-user.md","filePath":"guide/task-user.md","lastUpdated":1699711149000}'),p={name:"guide/task-user.md"},o=l("",40),e=[o];function c(t,r,E,y,i,d){return n(),a("div",null,e)}const g=s(p,[["render",c]]);export{u as __pageData,g as default}; +import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"自定义任务和流程","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task-user.md","filePath":"guide/task-user.md","lastUpdated":1702347208000}'),p={name:"guide/task-user.md"},o=l("",42),e=[o];function c(t,r,E,y,i,d){return n(),a("div",null,e)}const C=s(p,[["render",c]]);export{u as __pageData,C as default}; diff --git a/assets/guide_task.md.61077b6b.js b/assets/guide_task.md.61077b6b.js deleted file mode 100644 index 3972ce8..0000000 --- a/assets/guide_task.md.61077b6b.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,Q as i}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"概要","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task.md","filePath":"guide/task.md","lastUpdated":1699711149000}'),t={name:"guide/task.md"},d=i('

概要

pipflow 内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。

主要任务类型包含:

  • html - HTML处理任务
  • script - JavaScript处理任务
  • style - CSS处理任务
  • static - 静态资源处理任务
  • image - 图片资源处理任务
  • server - 创建本地服务器任务
  • copy - 复制文件任务
  • remove - 删除文件任务
  • archive - 打包压缩任务
  • user - 用户自定义任务
  • compose - 组合任务

基于以上任务类型,你可以很容易的实现各种构建任务。既可以在已有的任务上扩展,也可以创建新的任务,还可以将已有任务和新增任务组合成新的构建任务。

下面我将详细介绍每一个任务类型,及其使用方法。

',6),a=[d];function l(s,r,_,p,n,u){return o(),c("div",null,a)}const f=e(t,[["render",l]]);export{h as __pageData,f as default}; diff --git a/assets/guide_task.md.61077b6b.lean.js b/assets/guide_task.md.61077b6b.lean.js deleted file mode 100644 index 75cb191..0000000 --- a/assets/guide_task.md.61077b6b.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as e,o,c,Q as i}from"./chunks/framework.e1e0b12f.js";const h=JSON.parse('{"title":"概要","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task.md","filePath":"guide/task.md","lastUpdated":1699711149000}'),t={name:"guide/task.md"},d=i("",6),a=[d];function l(s,r,_,p,n,u){return o(),c("div",null,a)}const f=e(t,[["render",l]]);export{h as __pageData,f as default}; diff --git a/assets/guide_task.md.965c5267.js b/assets/guide_task.md.965c5267.js new file mode 100644 index 0000000..07add42 --- /dev/null +++ b/assets/guide_task.md.965c5267.js @@ -0,0 +1 @@ +import{_ as e,o,c as i,Q as c}from"./chunks/framework.e1e0b12f.js";const S=JSON.parse('{"title":"概要","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task.md","filePath":"guide/task.md","lastUpdated":1702347208000}'),l={name:"guide/task.md"},t=c('

概要

pipflow 内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。

主要任务类型包含:

  • html - HTML处理任务,可用于 HTML 文件的语法检查、模板渲染、压缩等
  • script - JavaScript处理任务,可用于 JavaScript 文件的语法检查、美化、压缩、打包等
  • style - CSS处理任务,可用于 CSS 预处理器编译、美化、压缩等处理
  • static - 静态资源处理任务,可用于图片、字体等静态资源的优化、复制等处理
  • image - 图片资源处理任务,专门用于图片资源的压缩、格式转换等处理
  • server - 创建本地服务器任务,可以快速创建一个本地开发服务器
  • copy - 复制文件任务
  • remove - 删除文件任务
  • archive - 打包压缩任务,可以将文件打包成 zip 压缩包
  • user - 用户自定义任务,自定义一些全新任务,完全自主控制处理流程
  • compose - 组合任务,将已有任务组合成一个新任务,实现更复杂的构建处理

基于以上核心任务类型,可以通过配置实现自动化的资源处理,比如:

  • HTML/CSS/JS 的语法检查和压缩
  • 图片压缩和格式转换
  • 打包和发布等处理

你可以在已有的任务基础上进行扩展,也可以创建全新的任务,还可以将已有任务和新增任务组合成新的构建任务,极大提高工作效率。

下面我将详细介绍每一个任务类型,及其使用方法。

',9),d=[t];function a(s,r,p,_,n,u){return o(),i("div",null,d)}const h=e(l,[["render",a]]);export{S as __pageData,h as default}; diff --git a/assets/guide_task.md.965c5267.lean.js b/assets/guide_task.md.965c5267.lean.js new file mode 100644 index 0000000..d42433e --- /dev/null +++ b/assets/guide_task.md.965c5267.lean.js @@ -0,0 +1 @@ +import{_ as e,o,c as i,Q as c}from"./chunks/framework.e1e0b12f.js";const S=JSON.parse('{"title":"概要","description":"","frontmatter":{},"headers":[],"relativePath":"guide/task.md","filePath":"guide/task.md","lastUpdated":1702347208000}'),l={name:"guide/task.md"},t=c("",9),d=[t];function a(s,r,p,_,n,u){return o(),i("div",null,d)}const h=e(l,[["render",a]]);export{S as __pageData,h as default}; diff --git a/assets/help.md.1e53339b.js b/assets/help.md.1e53339b.js new file mode 100644 index 0000000..b261bc5 --- /dev/null +++ b/assets/help.md.1e53339b.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as s,Q as t}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"help.md","filePath":"help.md","lastUpdated":1702347208000}'),o={name:"help.md"},r=t('

常见问题

1. 安装依赖时间过长

  1. 设置 .mpmrc
bash
registry=https://registry.npmmirror.com/
registry=https://registry.npmmirror.com/
  1. 使用 cnpm

2. 安装依赖失败

经常碰到安装依赖失败,多数是因为网络原因:很多包将源码托管在 s3 服务器上,国内可能无法访问。

',7),l=[r];function n(c,p,i,d,h,_){return e(),s("div",null,l)}const b=a(o,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/help.md.1e53339b.lean.js b/assets/help.md.1e53339b.lean.js new file mode 100644 index 0000000..fd2aa5c --- /dev/null +++ b/assets/help.md.1e53339b.lean.js @@ -0,0 +1 @@ +import{_ as a,o as e,c as s,Q as t}from"./chunks/framework.e1e0b12f.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"help.md","filePath":"help.md","lastUpdated":1702347208000}'),o={name:"help.md"},r=t("",7),l=[r];function n(c,p,i,d,h,_){return e(),s("div",null,l)}const b=a(o,[["render",n]]);export{u as __pageData,b as default}; diff --git a/assets/index.md.3a317510.js b/assets/index.md.3a317510.js deleted file mode 100644 index c8693b5..0000000 --- a/assets/index.md.3a317510.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as e,c as i}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"pipflow","titleTemplate":"基于gulp的web开发工作流,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","description":"","frontmatter":{"layout":"home","title":"pipflow","titleTemplate":"基于gulp的web开发工作流,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","hero":{"name":"Pipflow","text":"开箱即用的前端开发工作流","tagline":"旨在使web应用程序的开发/构建流程变得更简单!","actions":[{"theme":"brand","text":"开始","link":"/guide/"},{"theme":"alt","text":"在github上查看","link":"https://github.com/meqn/pipflow"}]},"features":[{"icon":"📦","title":"开箱即用","details":"通过`pipflow`命令快速创建项目,无需编写冗长的gulp配置代码!"},{"icon":"🚀","title":"高效性能","details":"优化gulp任务,缓存已通过的文件信息以实现增量构建。"},{"icon":"🎨","title":"功能丰富","details":"内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。"},{"icon":"🛠","title":"可配置","details":"通过简单配置即可完成前端流程的自动构建及任务顺序等。"},{"icon":"🔗","title":"可扩展","details":"根据需求轻松扩展现有任务处理流程或自定义新任务。"},{"icon":"🏳️‍🌈","title":"多环境支持","details":"设置运行模式, 可以在开发环境和生产环境之间轻松切换。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1699711149000}'),l={name:"index.md"};function a(o,n,p,s,d,c){return e(),i("div")}const f=t(l,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/index.md.3a317510.lean.js b/assets/index.md.3a317510.lean.js deleted file mode 100644 index c8693b5..0000000 --- a/assets/index.md.3a317510.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as t,o as e,c as i}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"pipflow","titleTemplate":"基于gulp的web开发工作流,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","description":"","frontmatter":{"layout":"home","title":"pipflow","titleTemplate":"基于gulp的web开发工作流,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","hero":{"name":"Pipflow","text":"开箱即用的前端开发工作流","tagline":"旨在使web应用程序的开发/构建流程变得更简单!","actions":[{"theme":"brand","text":"开始","link":"/guide/"},{"theme":"alt","text":"在github上查看","link":"https://github.com/meqn/pipflow"}]},"features":[{"icon":"📦","title":"开箱即用","details":"通过`pipflow`命令快速创建项目,无需编写冗长的gulp配置代码!"},{"icon":"🚀","title":"高效性能","details":"优化gulp任务,缓存已通过的文件信息以实现增量构建。"},{"icon":"🎨","title":"功能丰富","details":"内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。"},{"icon":"🛠","title":"可配置","details":"通过简单配置即可完成前端流程的自动构建及任务顺序等。"},{"icon":"🔗","title":"可扩展","details":"根据需求轻松扩展现有任务处理流程或自定义新任务。"},{"icon":"🏳️‍🌈","title":"多环境支持","details":"设置运行模式, 可以在开发环境和生产环境之间轻松切换。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1699711149000}'),l={name:"index.md"};function a(o,n,p,s,d,c){return e(),i("div")}const f=t(l,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/index.md.de590694.js b/assets/index.md.de590694.js new file mode 100644 index 0000000..ee241ac --- /dev/null +++ b/assets/index.md.de590694.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as i}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"pipflow","titleTemplate":"基于gulp工作流的前端构建工具,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","description":"","frontmatter":{"layout":"home","title":"pipflow","titleTemplate":"基于gulp工作流的前端构建工具,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","hero":{"name":"Pipflow","text":"开箱即用的前端开发工作流","tagline":"旨在使web应用程序的开发/构建流程变得更简单!","actions":[{"theme":"brand","text":"开始","link":"/guide/"},{"theme":"alt","text":"在github上查看","link":"https://github.com/meqn/pipflow"}]},"features":[{"icon":"📦","title":"开箱即用","details":"通过`pipflow`命令快速创建项目,无需编写冗长的gulp配置代码!"},{"icon":"🚀","title":"高效性能","details":"优化gulp任务,缓存已通过的文件信息以实现增量构建。"},{"icon":"🎨","title":"功能丰富","details":"内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。"},{"icon":"🛠","title":"可配置","details":"通过简单配置即可完成前端流程的自动构建及任务顺序等。"},{"icon":"🔗","title":"可扩展","details":"根据需求轻松扩展现有任务处理流程或自定义新任务。"},{"icon":"🏳️‍🌈","title":"多环境支持","details":"设置运行模式, 可以在开发环境和生产环境之间轻松切换。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1702347208000}'),l={name:"index.md"};function a(o,n,p,s,d,c){return e(),i("div")}const f=t(l,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/index.md.de590694.lean.js b/assets/index.md.de590694.lean.js new file mode 100644 index 0000000..ee241ac --- /dev/null +++ b/assets/index.md.de590694.lean.js @@ -0,0 +1 @@ +import{_ as t,o as e,c as i}from"./chunks/framework.e1e0b12f.js";const m=JSON.parse('{"title":"pipflow","titleTemplate":"基于gulp工作流的前端构建工具,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","description":"","frontmatter":{"layout":"home","title":"pipflow","titleTemplate":"基于gulp工作流的前端构建工具,内置合并、编译、打包、压缩等功能,极大简化前端开发流程","hero":{"name":"Pipflow","text":"开箱即用的前端开发工作流","tagline":"旨在使web应用程序的开发/构建流程变得更简单!","actions":[{"theme":"brand","text":"开始","link":"/guide/"},{"theme":"alt","text":"在github上查看","link":"https://github.com/meqn/pipflow"}]},"features":[{"icon":"📦","title":"开箱即用","details":"通过`pipflow`命令快速创建项目,无需编写冗长的gulp配置代码!"},{"icon":"🚀","title":"高效性能","details":"优化gulp任务,缓存已通过的文件信息以实现增量构建。"},{"icon":"🎨","title":"功能丰富","details":"内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。"},{"icon":"🛠","title":"可配置","details":"通过简单配置即可完成前端流程的自动构建及任务顺序等。"},{"icon":"🔗","title":"可扩展","details":"根据需求轻松扩展现有任务处理流程或自定义新任务。"},{"icon":"🏳️‍🌈","title":"多环境支持","details":"设置运行模式, 可以在开发环境和生产环境之间轻松切换。"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1702347208000}'),l={name:"index.md"};function a(o,n,p,s,d,c){return e(),i("div")}const f=t(l,[["render",a]]);export{m as __pageData,f as default}; diff --git a/assets/markdown-examples.md.70dfad91.js b/assets/markdown-examples.md.9ec7908f.js similarity index 99% rename from assets/markdown-examples.md.70dfad91.js rename to assets/markdown-examples.md.9ec7908f.js index 1a10e2d..caaf7c0 100644 --- a/assets/markdown-examples.md.70dfad91.js +++ b/assets/markdown-examples.md.9ec7908f.js @@ -1,4 +1,4 @@ -import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md","lastUpdated":1699711149000}'),p={name:"markdown-examples.md"},e=l(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

\`\`\`js{4}
+import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md","lastUpdated":1702347208000}'),p={name:"markdown-examples.md"},e=l(`

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

\`\`\`js{4}
 export default {
   data () {
     return {
diff --git a/assets/markdown-examples.md.70dfad91.lean.js b/assets/markdown-examples.md.9ec7908f.lean.js
similarity index 85%
rename from assets/markdown-examples.md.70dfad91.lean.js
rename to assets/markdown-examples.md.9ec7908f.lean.js
index 9419840..a68212d 100644
--- a/assets/markdown-examples.md.70dfad91.lean.js
+++ b/assets/markdown-examples.md.9ec7908f.lean.js
@@ -1 +1 @@
-import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md","lastUpdated":1699711149000}'),p={name:"markdown-examples.md"},e=l("",19),o=[e];function t(i,c,r,d,h,E){return n(),a("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default};
+import{_ as s,o as n,c as a,Q as l}from"./chunks/framework.e1e0b12f.js";const g=JSON.parse('{"title":"Markdown Extension Examples","description":"","frontmatter":{},"headers":[],"relativePath":"markdown-examples.md","filePath":"markdown-examples.md","lastUpdated":1702347208000}'),p={name:"markdown-examples.md"},e=l("",19),o=[e];function t(i,c,r,d,h,E){return n(),a("div",null,o)}const u=s(p,[["render",t]]);export{g as __pageData,u as default};
diff --git a/config/build-options.html b/config/build-options.html
index 804e6c5..1cf6061 100644
--- a/config/build-options.html
+++ b/config/build-options.html
@@ -4,20 +4,25 @@
     
     
     构建选项 | pipflow
-    
+    
     
     
-    
+    
     
     
-    
-    
+    
+    
+    
+    
+    
+    
+    
     
     
   
   
-    
Skip to content

构建选项

build.outDir

  • 类型: string
  • 默认: dist

指定输出路径(相对于项目根目录)。

build.fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

build 命令构建后生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,同时也会生成对应的 manifest.json 文件。

  • 值为 false 时,关闭文件哈希。
  • 值为 true- 时,将生成文件名哈希和版本映射文件manifest.json
  • 值为 ? 时,仅生成版本映射文件manifest.json

build.sourcemap

  • 类型: boolean | 'inline'
  • 默认: false

构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。

build.minify

  • 类型: boolean
  • 默认: process.env.NODE_ENV === "production"

全局配置, 设置为 false 可以统一禁用最小化混淆或压缩。

⚠️ 提示

该配置项仅对任务类型 typehtml, style, script, static, image 有效。这里是全局配置,也可以在每个任务项内单独配置 minify

build.htmlMinify

  • 类型: boolean | HtmlMinifyOptions
  • 默认:build.minify 一致

HTML 最小化压缩配置项,此选项配置后会覆盖 build.minify

html压缩是基于 html-minifier-terser 插件, 详细配置请参见 这里

build.jsMinify

  • 类型: boolean | TerserMinifyOptions
  • 默认:build.minify 一致

Javascript 最小化混淆配置项,此选项配置后会覆盖 build.minify

JS最小化混淆是基于 terser 插件, 详细配置请参见 这里

build.cssMinify

  • 类型: boolean | CSSNanoOptions
  • 默认:build.minify 一致

CSS 最小化压缩配置项,此选项配置后会覆盖 build.minify

CSS压缩是基于 cssnano 插件, 详细配置请参见 这里

build.imageMinify

  • 类型: boolean | {plugins?: Plugin[], options?: Options}
  • 默认: dist

图片压缩配置项,此选项配置后会覆盖 build.minify

图片压缩是基于 gulp-imagemin 插件, 详细配置请参见 这里

🚨 提醒

由于安装 gulp-imagemin 依赖经常失败(国内环境),且图片压缩是一项耗时的一次性任务。所以 pipflowgulp-imagemin 的安装提取到项目的依赖中。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

Released under the MIT License.

- +
Skip to content

构建选项

build.outDir

  • 类型: string
  • 默认: dist

指定输出路径(相对于项目根目录)。

build.fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

build 命令构建后生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存,同时也会生成对应的 manifest.json 文件。

  • 值为 false 时,关闭文件哈希。
  • 值为 true- 时,将生成文件名哈希和版本映射文件manifest.json
  • 值为 ? 时,仅生成版本映射文件manifest.json

build.sourcemap

  • 类型: boolean | 'inline'
  • 默认: false

构建后是否生成 source map 文件。如果为 true,将会创建一个独立的 source map 文件。如果为 'inline',source map 将作为一个 data URI 附加在输出文件中。

build.minify

  • 类型: boolean
  • 默认: process.env.NODE_ENV === "production"

全局配置, 设置为 false 可以统一禁用最小化混淆或压缩。

⚠️ 提示

该配置项仅对任务类型 typehtml, style, script, static, image 有效。这里是全局配置,也可以在每个任务项内单独配置 minify

build.htmlMinify

  • 类型: boolean | HtmlMinifyOptions
  • 默认:build.minify 一致

HTML 最小化压缩配置项,此选项配置后会覆盖 build.minify

html压缩是基于 html-minifier-terser 插件, 详细配置请参见 这里

build.jsMinify

  • 类型: boolean | TerserMinifyOptions
  • 默认:build.minify 一致

Javascript 最小化混淆配置项,此选项配置后会覆盖 build.minify

JS最小化混淆是基于 terser 插件, 详细配置请参见 这里

build.cssMinify

  • 类型: boolean | CSSNanoOptions
  • 默认:build.minify 一致

CSS 最小化压缩配置项,此选项配置后会覆盖 build.minify

CSS压缩是基于 cssnano 插件, 详细配置请参见 这里

build.imageMinify

  • 类型: boolean | {plugins?: Plugin[], options?: Options}
  • 默认: dist

图片压缩配置项,此选项配置后会覆盖 build.minify

图片压缩是基于 gulp-imagemin 插件, 详细配置请参见 这里

🚨 提醒

由于安装 gulp-imagemin 依赖经常失败(国内环境),且图片压缩是一项耗时的一次性任务。所以 pipflowgulp-imagemin 的安装提取到项目的依赖中。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

Released under the MIT License.

+ \ No newline at end of file diff --git a/config/index.html b/config/index.html index eb0db0d..288b154 100644 --- a/config/index.html +++ b/config/index.html @@ -4,19 +4,24 @@ 配置 pipflow | pipflow - + - + - - + + + + + + + -
Skip to content

配置 pipflow

当以命令行方式运行 pipflow 时,pipflow 会自动解析 项目根目录 下名为 pipflow.config.js 的配置文件(仅支持 jsjson 扩展名)。

最基础的配置文件是这样的:

js
// pipflow.config.js
+    
Skip to content

配置 pipflow

当以命令行方式运行 pipflow 时,pipflow 会自动解析 项目根目录 下名为 pipflow.config.js 的配置文件(仅支持 jsjson 扩展名)。

最基础的配置文件是这样的:

js
// pipflow.config.js
 module.exports = {
   // 配置选项
 }
// pipflow.config.js
@@ -58,8 +63,8 @@
       // build 独有配置
     }
   }
-})

Released under the MIT License.

- +})

Released under the MIT License.

+ \ No newline at end of file diff --git a/config/server-options.html b/config/server-options.html index bff9b93..1fc9bba 100644 --- a/config/server-options.html +++ b/config/server-options.html @@ -4,19 +4,24 @@ 开发服务器选项 | pipflow - + - + - - + + + + + + + -
Skip to content

开发服务器选项

pipflow 的本地开发服务器是基于 Browsersync 工具, 它为开发过程提供自动化、高效的同步与调试功能。

想要了解更多配置细节,请参考 这里

server.host

  • 类型: string
  • 默认: localhost

指定服务器应该监听哪个 IP 地址。

server.port

  • 类型: number
  • 默认: 9527

指定开发服务器端口。

也可以通过 CLI 使用 --port 3000 来设置。

server.https

  • 类型: boolean
  • 默认: false

为本地主机开发启用 https。注意: 代理选项不需要这样做,因为它会从目标网址中推断出来。

js
// Enable HTTPS for snippet mode
+    
Skip to content

开发服务器选项

pipflow 的本地开发服务器是基于 Browsersync 工具, 它为开发过程提供自动化、高效的同步与调试功能。

想要了解更多配置细节,请参考 这里

server.host

  • 类型: string
  • 默认: localhost

指定服务器应该监听哪个 IP 地址。

server.port

  • 类型: number
  • 默认: 9527

指定开发服务器端口。

也可以通过 CLI 使用 --port 3000 来设置。

server.https

  • 类型: boolean
  • 默认: false

为本地主机开发启用 https。注意: 代理选项不需要这样做,因为它会从目标网址中推断出来。

js
// Enable HTTPS for snippet mode
 {
   https: true
 }
@@ -178,8 +183,8 @@
 // Or switch them all off in one go
 {
   ghostMode: false
-}

server.notify

  • 类型: boolean
  • 默认: true

浏览器右上角的小弹窗通知。

Released under the MIT License.

- +}

server.notify

  • 类型: boolean
  • 默认: true

浏览器右上角的小弹窗通知。

Released under the MIT License.

+ \ No newline at end of file diff --git a/config/shared-options.html b/config/shared-options.html index 0cedce9..ed19cca 100644 --- a/config/shared-options.html +++ b/config/shared-options.html @@ -4,20 +4,25 @@ 共享配置 | pipflow - + - + - - + + + + + + + -
Skip to content

共享配置

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

glob base (有时称为 glob parent)是 glob 字符串中任何特殊字符之前的路径段。因此,/src/js/**.js 的 blob base 是 /src/js/。所有匹配 glob 的路径都保证共享 glob base,该路径段不能是可变的。

src() 生成的 Vinyl 实例是用 glob base 集作为它们的 base 属性构造的。当使用 dest() 写入文件系统时,将从输出路径中删除 base ,以保留目录结构。

有关更深入的信息,请参阅 glob-parent 库。

publicDir

  • 类型: string | false
  • 默认: "public"

作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供,并在构建期间复制到 outDir 的根目录,并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径,也可以是相对于项目根目录的相对路径。

publicDir 设定为 false 可以关闭此项功能。

alias

  • 类型: { [key string]: string }

全局字符串别名,在处理html, javascript, css 文件时, 每一项将会被静态替换。

友情提醒

这里的 alias 仅仅是字符串的别名替换,不同于 webpack, vitealias 功能。

envDir

  • 类型: string
  • 默认: root

用于加载 .env 文件的目录。可以是一个绝对路径,也可以是相对于项目根的路径。

关于环境文件的更多信息,请参见 这里

Released under the MIT License.

- +
Skip to content

共享配置

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

glob base (有时称为 glob parent)是 glob 字符串中任何特殊字符之前的路径段。因此,/src/js/**.js 的 blob base 是 /src/js/。所有匹配 glob 的路径都保证共享 glob base,该路径段不能是可变的。

src() 生成的 Vinyl 实例是用 glob base 集作为它们的 base 属性构造的。当使用 dest() 写入文件系统时,将从输出路径中删除 base ,以保留目录结构。

有关更深入的信息,请参阅 glob-parent 库。

publicDir

  • 类型: string | false
  • 默认: "public"

作为静态资源服务的文件夹。该目录中的文件在开发期间在 / 处提供,并在构建期间复制到 outDir 的根目录,并且始终按原样提供或复制而无需进行转换。该值可以是文件系统的绝对路径,也可以是相对于项目根目录的相对路径。

publicDir 设定为 false 可以关闭此项功能。

alias

  • 类型: { [key string]: string }

全局字符串别名,在处理html, javascript, css 文件时, 每一项将会被静态替换。

友情提醒

这里的 alias 仅仅是字符串的别名替换,不同于 webpack, vitealias 功能。

envDir

  • 类型: string
  • 默认: root

用于加载 .env 文件的目录。可以是一个绝对路径,也可以是相对于项目根的路径。

关于环境文件的更多信息,请参见 这里

Released under the MIT License.

+ \ No newline at end of file diff --git a/config/task-options.html b/config/task-options.html index 442f788..bf96cd9 100644 --- a/config/task-options.html +++ b/config/task-options.html @@ -4,19 +4,24 @@ 任务配置 | pipflow - + - + - - + + + + + + + -
Skip to content

任务配置

每个任务的单独配置项,设置后会覆盖全局配置。

name

  • 类型: string
  • 默认: [type]:[index]

任务名称, 默认为 任务类型 + 任务索引

type

  • 类型: string

任务类型。 查看所有任务类型 请参见 这里

input

  • 类型: string | string[] | object

指定任务入口文件。

dest

  • 类型: string
  • 默认: dist

指定任务输出路径。

继承 build.outDir 配置,请参见 这里

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

继承 全局 base 配置,请参见 这里

compiler

  • 类型: string

文件转译工具。仅对任务类型为 html, style, script 有效。

  1. type'html'时, compiler 为 HTML模板引擎;(请参见 这里)

内置模板引擎: Pug, EJS, Handlebars, Nunjucks, art-template

  1. type'style'时, compiler 为 CSS预处理器。(请参见 这里)

支持的 CSS 预处理器: sass, less, stylus

  1. type'script'时, compilerbabel

compilerOptions

  • 类型: object

转译配置项。

  1. HTML模板引擎 配置项,请参见 这里
  2. CSS预处理器 配置项,请参见 这里

1. HTML模板引擎

当转译器compiler 为 HTML模板引擎时,其值为传递给 HTML 模板引擎的选项。

ts
interface CompilerOptions {
+    
Skip to content

任务配置

每个任务的单独配置项,设置后会覆盖全局配置。

name

  • 类型: string
  • 默认: [type]:[index]

任务名称, 默认为 任务类型 + 任务索引

type

  • 类型: string

任务类型。 查看所有任务类型 请参见 这里

input

  • 类型: string | string[] | object

指定任务入口文件。

dest

  • 类型: string
  • 默认: dist

指定任务输出路径。

继承 build.outDir 配置,请参见 这里

base

  • 类型: string
  • 默认: ./src

显式地在创建的 Vinyl 对象上设置 base 属性。

继承 全局 base 配置,请参见 这里

compiler

  • 类型: string

文件转译工具。仅对任务类型为 html, style, script 有效。

  1. type'html'时, compiler 为 HTML模板引擎;(请参见 这里)

内置模板引擎: Pug, EJS, Handlebars, Nunjucks, art-template

  1. type'style'时, compiler 为 CSS预处理器。(请参见 这里)

支持的 CSS 预处理器: sass, less, stylus

  1. type'script'时, compilerbabel

compilerOptions

  • 类型: object

转译配置项。

  1. HTML模板引擎 配置项,请参见 这里
  2. CSS预处理器 配置项,请参见 这里

1. HTML模板引擎

当转译器compiler 为 HTML模板引擎时,其值为传递给 HTML 模板引擎的选项。

ts
interface CompilerOptions {
   // 渲染时的数据
   data: {
     [key: string]: any
@@ -76,7 +81,7 @@
   preprocessorOptions: {
     [key: string]: any
   }
-}

每个预处理器支持的选项可以在它们各自的文档中找到:

示例:

js
// pipflow.config.js
+}

每个预处理器支持的选项可以在它们各自的文档中找到:

示例:

js
// pipflow.config.js
 module.exports = {
   tasks: [
     {
@@ -108,8 +113,8 @@
       }
     }
   ]
-}

additionalData 选项

所有预处理器选项支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

minify

  • 类型: boolean | MinifyOptions
  • 默认: false

文件最小化混淆或压缩。

继承 build.minify 配置 或 对应的混淆/压缩配置项,请参见 这里

plugins

  • 类型: function[]

自定义任务处理流程。 请参见 这里

fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

文件哈希和版本控制

继承 build.fileHash 配置,请参见 这里

sourcemap

  • 类型: boolean
  • 默认: false

是否生成 source map 文件。

继承 build.sourcemap 配置,请参见 这里

alias

  • 类型: { [key: string]: string }

别名替换,会合并全局 alias 配置。

继承 全局 alias 配置,请参见 这里

watch

  • 类型: boolean
  • 默认: false

serve 阶段是否监视文件变动并重新编译、刷新页面。

filename

  • 类型: string
  • 默认: archive

生成的文件名。目前仅对 archive 任务类型有效。

温馨提示

如果需要创建压缩包,可以使用 pipflow pack 命令快速生成压缩包。 请参见 [这里]。

Released under the MIT License.

- +}

additionalData 选项

所有预处理器选项支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

minify

  • 类型: boolean | MinifyOptions
  • 默认: false

文件最小化混淆或压缩。

继承 build.minify 配置 或 对应的混淆/压缩配置项,请参见 这里

plugins

  • 类型: function[]

自定义任务处理流程。 请参见 这里

fileHash

  • 类型: boolean | '-' | '?'
  • 默认: false

文件哈希和版本控制

继承 build.fileHash 配置,请参见 这里

sourcemap

  • 类型: boolean
  • 默认: false

是否生成 source map 文件。

继承 build.sourcemap 配置,请参见 这里

alias

  • 类型: { [key: string]: string }

别名替换,会合并全局 alias 配置。

继承 全局 alias 配置,请参见 这里

watch

  • 类型: boolean
  • 默认: false

serve 阶段是否监视文件变动并重新编译、刷新页面。

支持 'html', 'style', 'script', 'static', 'image', 'copy', 'user' 类型任务。

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/assets.html b/guide/assets.html index 06a09f9..cf42554 100644 --- a/guide/assets.html +++ b/guide/assets.html @@ -4,19 +4,24 @@ 静态资源处理 | pipflow - + - + - - + + + + + + + -
Skip to content

静态资源处理

资源文件URL

在页面中引入资源文件,建议用绝对路径(以 / 开头)引入。

你可以在 pipflow.config.js 配置文件中设置路径别名,在页面内通过别名+路径引入文件,编译阶段会被统一静态替换。

json
// pipflow.config.json
+    
Skip to content

静态资源处理

资源文件URL

在页面中引入资源文件,建议用绝对路径(以 / 开头)引入。

你可以在 pipflow.config.js 配置文件中设置路径别名,在页面内通过别名+路径引入文件,编译阶段会被统一静态替换。

json
// pipflow.config.json
 {
   "alias": {
     "@img": "/assets/images",
@@ -36,8 +41,8 @@
 <img src="@img/background.png">
 
 <!-- 构建后的内容 -->
-<img src="/assets/images/background.png">

public 目录

如果你有下列这些资源:

  • 不会被源码引用(例如 robots.txt)
  • 必须保持原有文件名(没有经过 hash)
  • ...或者你压根不想引入该资源,只是想得到其 URL。

那么你可以将该资源放在指定的 public 目录中,它应位于你的项目根目录。该目录中的资源在开发时能直接通过 / 根路径访问到,并且打包时会被完整复制到目标目录的根目录下。

目录默认是 <root>/public,但可以通过 publicDir 选项 来配置。 请参见 这里

请注意

引入 public 中的资源永远应该使用根绝对路径 —— 举个例子,public/icon.png 应该在源码中被引用为 /icon.png

文件指纹

静态文件指纹是为了解决缓存问题,可以帮助优化浏览器缓存和文件更新的管理。它可以确保用户获得最新的文件版本,同时提高网站的性能和用户体验。

如果你在配置文件中开启了文件指纹,则在 build 之后引入的文件路径会携带文件指纹(以文件名或url参数形式)。仅在 build 阶段有效。

关于 build.fileHash 配置请参见 这里

Released under the MIT License.

- +<img src="/assets/images/background.png">

public 目录

如果你有下列这些资源:

  • 不会被源码引用(例如 robots.txt)
  • 必须保持原有文件名(没有经过 hash)
  • ...或者你压根不想引入该资源,只是想得到其 URL。

那么你可以将该资源放在指定的 public 目录中,它应位于你的项目根目录。该目录中的资源在开发时能直接通过 / 根路径访问到,并且打包时会被完整复制到目标目录的根目录下。

目录默认是 <root>/public,但可以通过 publicDir 选项 来配置。 请参见 这里

请注意

引入 public 中的资源永远应该使用根绝对路径 —— 举个例子,public/icon.png 应该在源码中被引用为 /icon.png

文件指纹

静态文件指纹是为了解决缓存问题,可以帮助优化浏览器缓存和文件更新的管理。它可以确保用户获得最新的文件版本,同时提高网站的性能和用户体验。

如果你在配置文件中开启了文件指纹,则在 build 之后引入的文件路径会携带文件指纹(以文件名或url参数形式)。仅在 build 阶段有效。

关于 build.fileHash 配置请参见 这里

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/build.html b/guide/build.html index 0e4e4a8..40210f5 100644 --- a/guide/build.html +++ b/guide/build.html @@ -4,19 +4,24 @@ 构建生产版本 | pipflow - + - + - - + + + + + + + -
Skip to content

构建生产版本

当需要将应用部署到生产环境时,只需运行 pipflow build 命令。默认情况下,它使用 <root>/index.html 作为其入口,并生成能够静态部署的应用程序包。

浏览器兼容性

browserslist

通过 pipflow create 创建的项目,在项目根目录下有一个单独的 .browserslistrc 文件,用于指定项目支持的浏览器范围。你也可以在 package.json 文件里配置 browserslist 字段。

这个值会被 @babel/preset-envpostcss-preset-env 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

现在查阅 这里 了解如何指定浏览器范围。

Polyfill

一个基于 pipflow CLI 创建的项目,它通过 @babel/preset-envbrowserslist 配置来决定项目需要的 polyfill。

默认情况下,babel.config.js 预设 useBuiltIns: "usage",这样它会根据源代码中出现的语言特性自动检测需要的 polyfill。这确保了最终包里 polyfill 数量的最小化。然而,这也意味着如果其中一个依赖需要特殊的 polyfill,默认情况下 Babel 无法将其检测出来。

你可以通过修改项目中的 babel.config.js 配置来自行调整 polyfill。

温馨提示

我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出的 polyfill 在 browserslist 的目标中不需要,则它会被自动排除。

自定义构建

构建生产环境应用程序包默认是通过 pipflow build 命令来完成的。如果在未修改配置文件 pipflow.config.jstasks 选项时,其构建过程任务如下:

└─┬ build
+    
Skip to content

构建生产版本

当需要将应用部署到生产环境时,只需运行 pipflow build 命令。默认情况下,它使用 <root>/index.html 作为其入口,并生成能够静态部署的应用程序包。

浏览器兼容性

browserslist

通过 pipflow create 创建的项目,在项目根目录下有一个单独的 .browserslistrc 文件,用于指定项目支持的浏览器范围。你也可以在 package.json 文件里配置 browserslist 字段。

这个值会被 @babel/preset-envpostcss-preset-env 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

现在查阅 这里 了解如何指定浏览器范围。

Polyfill

一个基于 pipflow CLI 创建的项目,它通过 @babel/preset-envbrowserslist 配置来决定项目需要的 polyfill。

默认情况下,babel.config.js 预设 useBuiltIns: "usage",这样它会根据源代码中出现的语言特性自动检测需要的 polyfill。这确保了最终包里 polyfill 数量的最小化。然而,这也意味着如果其中一个依赖需要特殊的 polyfill,默认情况下 Babel 无法将其检测出来。

你可以通过修改项目中的 babel.config.js 配置来自行调整 polyfill。

温馨提示

我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出的 polyfill 在 browserslist 的目标中不需要,则它会被自动排除。

自定义构建

构建生产环境应用程序包默认是通过 pipflow build 命令来完成的。如果在未修改配置文件 pipflow.config.jstasks 选项时,其构建过程任务如下:

└─┬ build
   └─┬ <series>
     ├── del:dest
     ├─┬ <parallel>
@@ -50,8 +55,8 @@
     "build": "pipflow task <compose-build-name> --mode=production", 
     "preview": "pipflow task server --preview"
   }
-}

然后运行 npm run build 即可。

提醒

自定义 build 命令必须使用 --mode=production 参数。 如果要构建 mode 不为 production 的其他平台环境的部署包,请在命令开头加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction)。

完整命令如下:

cross-env NODE_ENV=production pipflow task <compose-build-name> --mode=staging
cross-env NODE_ENV=production pipflow task <compose-build-name> --mode=staging

Released under the MIT License.

- +}

然后运行 npm run build 即可。

提醒

自定义 build 命令必须使用 --mode=production 参数。 如果要构建 mode 不为 production 的其他平台环境的部署包,请在命令开头加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction)。

完整命令如下:

cross-env NODE_ENV=production pipflow task <compose-build-name> --mode=staging
cross-env NODE_ENV=production pipflow task <compose-build-name> --mode=staging

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/cli.html b/guide/cli.html index 52d3d39..189b463 100644 --- a/guide/cli.html +++ b/guide/cli.html @@ -4,19 +4,24 @@ 命令行界面 | pipflow - + - + - - + + + + + + + -
Skip to content

命令行界面

CLI (@pipflow/cli) 是一个全局安装的 npm 包,提供了终端里的 pipflow 命令。你可以通过 pipflow create 快速搭建一个新项目,然后运行 pipflow dev 进行便捷开发。下面我们来深入介绍每个命令的使用。

温馨提示

你也可以在终端里使用 pw 命令。它是 pipflow 命令的缩写,由 pipflow 的首尾字母组合而成。

创建项目

pipflow create

创建一个新项目。

使用

运行以下命令来创建一个新项目:

bash
pipflow create hello-world
pipflow create hello-world

你会被提示选取需要的特性。

bash
pipflow CLI v0.4.0
+    
Skip to content

命令行界面

CLI (@pipflow/cli) 是一个全局安装的 npm 包,提供了终端里的 pipflow 命令。你可以通过 pipflow create 快速搭建一个新项目,然后运行 pipflow dev 进行便捷开发。下面我们来深入介绍每个命令的使用。

温馨提示

你也可以在终端里使用 pw 命令。它是 pipflow 命令的缩写,由 pipflow 的首尾字母组合而成。

创建项目

pipflow create

创建一个新项目。

使用

运行以下命令来创建一个新项目:

bash
pipflow create hello-world
pipflow create hello-world

你会被提示选取需要的特性。

bash
pipflow CLI v0.4.0
 ? Check the features needed for your project: (Press <space> to select, <a> to toggle
 all, <i> to invert selection, and <enter> to proceed)
 ❯◯ Babel
@@ -186,7 +191,7 @@
 Options:
   -l, --list   List all tasks
   -T, --tasks  List all tasks
-  -h, --help   display help for command

pipflow server

启动一个本地HTTP服务器。它是基于 BrowserSync 的。
你可以在任何目录下运行该命令,无需其他配置。

使用

bash
pipflow server
pipflow server

选项

bash
 pipflow preview --help
+  -h, --help   display help for command

pipflow server

快速启动一个本地HTTP服务器,用于预览或演示单个 HTML 页面。它是基于 BrowserSync 实现的。

无需配置,可在任意目录启动服务器,同时也支持参数自定义,如端口、目录、是否监听文件变化、浏览器自动刷新等。

使用

bash
pipflow server
pipflow server

选项

bash
 pipflow preview --help
 
 Usage: pw server [options]
 
@@ -224,8 +229,8 @@
   --open               open browser on server start
   --no-open            not open browser on server start
   --no-notify          disable the notify element in browser
-  -h, --help           display help for command

pipflow-info

打印当前项目的运行环境信息。

使用

bash
pipflow info
pipflow info

Released under the MIT License.

- + -h, --help display help for command

pipflow-info

打印当前项目的运行环境信息。

使用

bash
pipflow info
pipflow info

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/env-and-mode.html b/guide/env-and-mode.html index 3cddcf5..30d5753 100644 --- a/guide/env-and-mode.html +++ b/guide/env-and-mode.html @@ -4,19 +4,24 @@ 模式与环境变量 | pipflow - + - + - - + + + + + + + -
Skip to content

模式与环境变量

模式

默认情况下,开发服务器 (dev 命令) 运行在 development (开发) 模式,而 build 命令则运行在 production (生产) 模式。

这意味着当执行 pipflow build 时,它会自动加载 .env.production 中可能存在的环境变量:

# .env.production
+    
Skip to content

模式与环境变量

模式

默认情况下,开发服务器 (dev 命令) 运行在 development (开发) 模式,而 build 命令则运行在 production (生产) 模式。

这意味着当执行 pipflow build 时,它会自动加载 .env.production 中可能存在的环境变量:

# .env.production
 APP_TITLE=App Title
# .env.production
 APP_TITLE=App Title

在你的应用中,你可以使用 process.env.APP_TITLE 渲染标题。

在某些情况下,若想在 pipflow build 时运行不同的模式来渲染不同的标题,你可以通过传递 --mode 选项标志来覆盖命令使用的默认模式。例如,如果你想在 staging (预发布)模式下构建应用:

bash
pipflow build --mode staging
pipflow build --mode staging

还需要新建一个 .env.staging 文件:

# .env.staging
 APP_TITLE=App Title (staging)
# .env.staging
@@ -42,8 +47,8 @@
 NODE_ENV=development
APP_TITLE=App Title
 API_BASE_URL=http://test.api.com
 
-NODE_ENV=development

环境文件加载优先级

一份用于指定模式的环境文件 (例如 .env.production) 将会比一般的环境文件 (例如 .env) 拥有更高的优先级。

此外,pipflow 启动时已经存在的环境变量拥有最高优先级,并不会被 .env 文件覆写。

.env 环境文件是在 pipflow 启动一开始时被加载,因此环境文件发生变化,你需要重启服务。

想要了解解析环境文件规则的细节,请参考 dotenv

安全注意事项

  • .env.*.local 文件应是本地的,可以包含敏感变量。你应该将 *.local 添加到你的 .gitignore 中,以避免它们被 git 检入。
  • 由于任何暴露给 pipflow 源码的变量最终都将出现在客户端包中,因此环境变量应该不包含任何敏感信息。

Released under the MIT License.

- +NODE_ENV=development

环境文件加载优先级

一份用于指定模式的环境文件 (例如 .env.production) 将会比一般的环境文件 (例如 .env) 拥有更高的优先级。

此外,pipflow 启动时已经存在的环境变量拥有最高优先级,并不会被 .env 文件覆写。

.env 环境文件是在 pipflow 启动一开始时被加载,因此环境文件发生变化,你需要重启服务。

想要了解解析环境文件规则的细节,请参考 dotenv

安全注意事项

  • .env.*.local 文件应是本地的,可以包含敏感变量。你应该将 *.local 添加到你的 .gitignore 中,以避免它们被 git 检入。
  • 由于任何暴露给 pipflow 源码的变量最终都将出现在客户端包中,因此环境变量应该不包含任何敏感信息。

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/help.html b/guide/help.html deleted file mode 100644 index 911b15f..0000000 --- a/guide/help.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - 常见问题 | pipflow - - - - - - - - - - - - -
Skip to content

常见问题

安装依赖时间过长

  1. 设置 .mpmrc

  2. 使用 cnpm

我把部分依赖包抽离到外部,如果项目中不使用的话,可以直接删除。

  1. 图片压缩 删除package.json中的 gulp-imagemin 依赖 设置 imageMinify 为 false

安装依赖失败

经常碰到安装依赖失败,多数是因为网络原因:很多包将源码托管在 s3 服务器上,国内可能会被墙。

Released under the MIT License.

- - - - \ No newline at end of file diff --git a/guide/index.html b/guide/index.html index 121b7a2..4400973 100644 --- a/guide/index.html +++ b/guide/index.html @@ -4,19 +4,24 @@ 开始 | pipflow - + - + - - + + + + + + + -
Skip to content

开始

总览

pipflow (pipe-workflow) 是一个基于gulp的前端开发工作流。它内置了诸如合并、编译、打包、压缩等功能,极大地简化了前端开发流程。它提供了一组开箱即用的gulp任务和功能,开发者无需从零开始配置就可以立即启动前端项目的开发。

pipflow的主要功能包括:

  • HTML模板渲染 - 内置5款流行的模板引擎,开箱即用
  • CSS预处理 - 支持LESS/SASS(SCSS)/Stylus,自动添加浏览器前缀,压缩等
  • JavaScript语法转换、合并、压缩、校验、兼容老版本浏览器
  • 图片优化 - 无损压缩图片,生成雪碧图
  • Sourcemap和文件指纹 - 更容易调试和版本控制
  • 本地开发服务器 - 支持HTTPS和浏览器同步测试
  • 文件监视 - 自动检测文件变动并重新编译、合并、刷新页面
  • 自定义任务 - 可以扩展已有任务,满足各种需求

通过pipflow,开发者可以专注于代码编写,无需浪费时间在重复的工程配置上。它使用简单的命令就可以完成复杂的前端构建工作,并标准化了构建流程,极大地提升了项目之间的一致性和开发效率。

💡 温馨说明

简单易用和预设功能,使其成为基于gulp工作流的理想选择。

搭建 pipflow 项目

兼容性注意

pipflow 需要 Node.js 版本 14.13+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

运行 create 命令创建新项目:

bash
pipflow create my-project
pipflow create my-project

然后按照提示操作即可! 具体参数说明请参见 这里

命令行界面

如果在本机全局安装了 @pipflow/cli,进入项目根目录后,可以直接运行 pipflow dev 即可启动当前项目。
下面是通过脚手架创建的 pipflow 项目中默认的 npm scripts:

json
{
+    
Skip to content

开始

总览

pipflow (pipe-workflow) 是一个基于gulp的前端开发工作流。它内置了诸如合并、编译、打包、压缩等功能,极大地简化了前端开发流程。它提供了一组开箱即用的gulp任务和功能,开发者无需从零开始配置就可以立即启动前端项目的开发。

pipflow的主要功能包括:

  • HTML模板渲染 - 内置5款流行的模板引擎,开箱即用
  • CSS预处理 - 支持LESS/SASS(SCSS)/Stylus,自动添加浏览器前缀,压缩等
  • JavaScript语法转换、合并、压缩、校验、兼容老版本浏览器
  • 图片优化 - 无损压缩图片,生成雪碧图
  • Sourcemap和文件指纹 - 更容易调试和版本控制
  • 本地开发服务器 - 支持HTTPS和浏览器同步测试
  • 文件监视 - 自动检测文件变动并重新编译、合并、刷新页面
  • 自定义任务 - 可以扩展已有任务,满足各种需求

通过pipflow,开发者可以专注于代码编写,无需浪费时间在重复的工程配置上。它使用简单的命令就可以完成复杂的前端构建工作,并标准化了构建流程,极大地提升了项目之间的一致性和开发效率。

💡 温馨说明

简单易用和预设功能,使其成为基于gulp工作流的理想选择。

搭建 pipflow 项目

兼容性注意

pipflow 需要 Node.js 版本 14.13+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

运行 create 命令创建新项目:

bash
pipflow create my-project
pipflow create my-project

然后按照提示操作即可! 具体参数说明请参见 这里

命令行界面

如果在本机全局安装了 @pipflow/cli,进入项目根目录后,可以直接运行 pipflow dev 即可启动当前项目。
下面是通过脚手架创建的 pipflow 项目中默认的 npm scripts:

json
{
   "scripts": {
     "dev": "pipflow dev", // 启动开发服务器,`pipflow dev`或`pw dev`
     "build": "pipflow build", // 为生产环境构建产物
@@ -30,8 +35,8 @@
     "preview": "pipflow task preview", // 本地预览生产构建产物
     "lint": "pipflow task lint", // 代码检查
   }
-}

可以指定额外的命令行选项,如 --port--no-open。 运行 pipflow --help 获得完整的命令行选项列表。

查看 命令行界面 了解更多细节。

配置

Released under the MIT License.

- +}

可以指定额外的命令行选项,如 --port--no-open。 运行 pipflow --help 获得完整的命令行选项列表。

查看 命令行界面 了解更多细节。

配置

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-assets.html b/guide/task-assets.html index 45904e4..ef291a5 100644 --- a/guide/task-assets.html +++ b/guide/task-assets.html @@ -3,43 +3,38 @@ - 静态资源 | pipflow - + 静态资源任务 | pipflow + - + - - + + + + + + + -
Skip to content

静态资源

静态文件任务

图片任务

图片压缩

由于图片压缩是一个耗时任务,且 gulp-imagemin 插件安装依赖经常失败(国内环境)。鉴于此会影响整个工程的安装运行,所以 pipflow 并未内置图片压缩功能,如果需要则手动安装依赖并引入插件即可。

具体步骤如下:

  1. 安装 gulp-imagemin 依赖
shell
npm install -D gulp-imagemin@7
npm install -D gulp-imagemin@7

注意

gulp-imagemin 只能安装 <=7 的版本,8及以上版本仅支持 esModule 模块化.

  1. pipflow.config.js 中找到当前任务,并加入以下代码
js
const imagemin = require('gulp-imagemin')
-
-module.exports = {
-  tasks: [
-    {
-      type: 'assets',
-      plugins: [
-        imagemin(/* options */)
-      ]
-    }
-  ]
-}
const imagemin = require('gulp-imagemin')
-
-module.exports = {
-  tasks: [
-    {
-      type: 'assets',
-      plugins: [
-        imagemin(/* options */)
-      ]
-    }
-  ]
-}

gulp-imagemin 插件在压缩图片过程中会自动过滤非图片文件。 请点击查看文档

Released under the MIT License.

- +
Skip to content

静态资源任务

任务类型为 staticimage

静态资源包含常见的图像、媒体和字体文件等。如果不想处理这些静态资源文件,你可以将它们放在 public 目录下。

任务流程

  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 压缩图片 - 基于 imagemin 压缩图片
  • 生成文件hash及manifest文件

图片压缩

由于图片压缩是一项耗时的一次性任务,且 gulp-imagemin 插件安装依赖经常失败(国内环境)。所以 pipflow 将 压缩图片作为一个可选项。如果你的项目不需要 压缩图片或者手动一次性压缩,请删除项目的 package.json 中的 gulp-imagemin 依赖,并将 imageMinify 配置项的值设置为 false

关于图片压缩配置,你可以为所有静态任务统一配置,也可以单独配置某个静态任务。

  1. 统一配置项 build.imageMinify , 具体请看 这里
  2. 单独任务配置项 minify
ts
ImageMinifyOptions : boolean | {
+  plugins?: ImageMinifyPlugin[]
+  options?: {
+    verbose?: boolean
+    silent?: boolean
+  }
+}
ImageMinifyOptions : boolean | {
+  plugins?: ImageMinifyPlugin[]
+  options?: {
+    verbose?: boolean
+    silent?: boolean
+  }
+}

gulp-imagemin 插件在压缩图片过程中会自动过滤非图片文件。 具体配置请点击 这里

🚨 提醒

gulp-imagemin 只能安装 <=7 的版本,8及以上版本仅支持 esModule 模块化.

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-html.html b/guide/task-html.html index 27e779f..19e4473 100644 --- a/guide/task-html.html +++ b/guide/task-html.html @@ -4,19 +4,24 @@ HTML 任务 | pipflow - + - + - - + + + + + + + -
Skip to content

HTML 任务

处理流程

  • 环境变量处理 - 环境变量在构建时会被静态替换
  • 模板渲染 - 渲染HTML模板引擎,支持 Pug, EJS, Handlebars, Nunjucks, art-template
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 内容压缩 - 基于 html-minifier-terser 的内容压缩
  • 资源文件指纹 - 将构建后通过生成的 manifest.json 中包含 hash 过的资源文件版本的映射,进行引入链接的替换

环境变量处理

html内容中的以 process.env.XXX 写入的环境变量将会被静态替换。

模板渲染

pipflow 内置了5款流行的模板引擎,它们曾经都是主流 🤪。让我们来逐一介绍它们:

  1. Pug:

    • 简介: Pug是一种高度可读性的模板引擎,具有简洁的语法和强大的功能。它采用缩进和标签语法,可以快速生成HTML代码。
    • 文档: Pug文档gulp-pug 插件文档
  2. EJS:

    • 简介: EJS(Embedded JavaScript)是一种简单而灵活的模板引擎,可将JavaScript代码嵌入到模板中。它允许您动态生成HTML页面。
    • 文档: EJS文档gulp-ejs 插件文档
  3. Handlebars:

    • 简介: Handlebars是一种语法简洁的模板引擎,它使用标签和表达式来生成HTML。它具有易学易用的特点,非常适合快速构建静态页面。
    • 文档: Handlebars文档gulp-hb 插件文档
  4. Nunjucks:

    • 简介: Nunjucks是一款功能强大的模板引擎,它支持条件语句、循环和继承等高级功能。它被广泛用于JavaScript开发中的模板渲染。
    • 文档: Nunjucks文档gulp-nunjucks 插件文档
  5. art-template:

    • 简介: art-template是一种快速、简洁而且可扩展的模板引擎。它支持JavaScript语法和自定义扩展,非常适合前端开发和服务器端渲染。
    • 它同时支持两种模板语法。原始语法兼容 EJSUnderscoreLoDash 模板,标准语法类似 Mustache
    • 文档: art-template文档gulp-art-tpl 插件文档
    • 个人推荐: 功能强大,使用简单

这些模板引擎在过去都很流行,每一款都有自己独特的特点和用法。您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目。

渲染配置项

示例

pipflow内置的模板引擎中,Handlebars 的使用相对复杂一些,那么我们来写一个 Handlebars 代码片段复用的示例。

模板文件:

html
<!-- ./src/index.html -->
+    
Skip to content

HTML 任务

任务类型为 html

任务流程

  • 环境变量处理 - 环境变量在构建时会被静态替换
  • 模板渲染 - 渲染HTML模板引擎,支持 Pug, EJS, Handlebars, Nunjucks, art-template
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • 内容压缩 - 基于 html-minifier-terser 的内容压缩
  • 资源文件指纹 - 将构建后通过生成的 manifest.json 中包含 hash 过的资源文件版本的映射,进行引入链接的替换

环境变量处理

html内容中的以 process.env.XXX 写入的环境变量将会被静态替换。

模板渲染

pipflow 内置了5款流行的模板引擎,它们曾经都是主流 🤪。让我们来逐一介绍它们:

  1. Pug:

    • 简介: Pug是一种高度可读性的模板引擎,具有简洁的语法和强大的功能。它采用缩进和标签语法,可以快速生成HTML代码。
    • 文档: Pug文档gulp-pug 插件文档
  2. EJS:

    • 简介: EJS(Embedded JavaScript)是一种简单而灵活的模板引擎,可将JavaScript代码嵌入到模板中。它允许您动态生成HTML页面。
    • 文档: EJS文档gulp-ejs 插件文档
  3. Handlebars:

    • 简介: Handlebars是一种语法简洁的模板引擎,它使用标签和表达式来生成HTML。它具有易学易用的特点,非常适合快速构建静态页面。
    • 文档: Handlebars文档gulp-hb 插件文档
  4. Nunjucks:

    • 简介: Nunjucks是一款功能强大的模板引擎,它支持条件语句、循环和继承等高级功能。它被广泛用于JavaScript开发中的模板渲染。
    • 文档: Nunjucks文档gulp-nunjucks 插件文档
  5. art-template:

    • 简介: art-template是一种快速、简洁而且可扩展的模板引擎。它支持JavaScript语法和自定义扩展,非常适合前端开发和服务器端渲染。
    • 它同时支持两种模板语法。原始语法兼容 EJSUnderscoreLoDash 模板,标准语法类似 Mustache
    • 文档: art-template文档gulp-art-tpl 插件文档
    • 个人推荐: 功能强大,使用简单

这些模板引擎在过去都很流行,每一款都有自己独特的特点和用法。您可以根据自己的需求和偏好选择适合的模板引擎来开发您的项目。

渲染配置项

示例

pipflow内置的模板引擎中,Handlebars 的使用相对复杂一些,那么我们来写一个 Handlebars 代码片段复用的示例。

模板文件:

html
<!-- ./src/index.html -->
 <html>
   <head>
     <title>pipflow</title>
@@ -96,8 +101,8 @@
   collapseBooleanAttributes: true,
   minifyJS: true,
   minifyCSS: true
-}

你可以通过 build.htmlMinify 配置项来指定压缩选项。 参见 这里

Released under the MIT License.

- +}

你可以通过 build.htmlMinify 配置项来指定压缩选项。 参见 这里

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-more.html b/guide/task-more.html index 8ce66ec..ad48810 100644 --- a/guide/task-more.html +++ b/guide/task-more.html @@ -4,34 +4,77 @@ 其他任务 | pipflow - + - + - - + + + + + + + -
Skip to content

其他任务

ZIP压缩任务 (archive)

bash
pipflow pack [options]
-
-# example
-pipflow pack dist/ dist.zip
-# 将 `dist/` 目录打包, 压缩包 `dist.zip`在项目的根目录
-
-pipflow pack public/favicon.ico src/ dist/source.zip
-# 将 `ico`文件 和 `src/` 目录打包, 压缩包 `source.zip`在dist目录中
pipflow pack [options]
-
-# example
-pipflow pack dist/ dist.zip
-# 将 `dist/` 目录打包, 压缩包 `dist.zip`在项目的根目录
-
-pipflow pack public/favicon.ico src/ dist/source.zip
-# 将 `ico`文件 和 `src/` 目录打包, 压缩包 `source.zip`在dist目录中

options

最后一项是打包输出的路径,其他项目是打包的目标路径。

Released under the MIT License.

- +
Skip to content

其他任务

下面是一些辅助任务,用于复制、压缩 和 删除 文件及目录等。

copy 复制任务

copy 任务用于复制文件和目录。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'copy',
+      input: 'src/assets/**/*',
+      dest: 'dist/assets/' 
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'copy',
+      input: 'src/assets/**/*',
+      dest: 'dist/assets/' 
+    }
+  ]
+}

这会将 src/assets/ 目录下的所有文件复制到 dist/assets/

copy任务支持 glob 写法来匹配文件,可以配置 inputdest 路径来定义复制源和输出目标。如果源文件是目录,会将整个目录复制过去。

remove 删除任务

remove 任务用于删除文件和目录。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'remove',
+      input: 'dist/**/*.map'
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'remove',
+      input: 'dist/**/*.map'
+    }
+  ]
+}

这会删除 dist 目录下所有的 .map 文件。

input 同样支持 glob 写法。

archive 压缩任务

archive 任务用于文件和目录的压缩和打包。

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'archive',
+      input: 'dist/**/*',
+      dest: 'release.zip'
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    {
+      type: 'archive',
+      input: 'dist/**/*',
+      dest: 'release.zip'
+    }
+  ]
+}

这会将 dist 目录下的所有文件和目录打包压缩成 release.zip

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-script.html b/guide/task-script.html index 53a02d6..68cb0b3 100644 --- a/guide/task-script.html +++ b/guide/task-script.html @@ -4,19 +4,24 @@ script 任务 | pipflow - + - + - - + + + + + + + -
Skip to content

script 任务

处理流程

  • 环境变量处理 - 环境变量注入
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • babel转译
  • 压缩混淆 - 基于 terser 压缩混淆
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

1. 字符串通配符

js
{
+    
Skip to content

script 任务

任务类型为 script

任务流程

  • 环境变量处理 - 环境变量注入
  • 别名替换 - 静态替换 alias 对应的字符串
  • 自定义处理流程 - 处理 pipflow.config.js 中添加的自定义 plugins
  • babel转译
  • 压缩混淆 - 基于 terser 压缩混淆
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

1. 字符串通配符

js
{
   input: './src/scripts/**/*.{js,mjs}'
 }
{
   input: './src/scripts/**/*.{js,mjs}'
@@ -54,8 +59,8 @@
 dist/scripts/index.js
 dist/scripts/pages.js
dist/scripts/comm/index.js
 dist/scripts/index.js
-dist/scripts/pages.js

babel 转译

如果开启 babel 转译,则使用 webpack 进行 Javascript 构建。

你可以通过修改项目中的 babel.config.js 文件来配置 babel 的转译选项。或者调整 .browserslistrc 修改支持的目标浏览器。

terser

Javascript 文件是基于 terser 进行压缩混淆,配置项请点 这里

具体配置可以查阅 terser

Released under the MIT License.

- +dist/scripts/pages.js

babel 转译

如果开启 babel 转译,则使用 webpack 进行 Javascript 构建。

你可以通过修改项目中的 babel.config.js 文件来配置 babel 的转译选项。或者调整 .browserslistrc 修改支持的目标浏览器。

terser

Javascript 文件是基于 terser 进行压缩混淆,配置项请点 这里

具体配置可以查阅 terser

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-server.html b/guide/task-server.html new file mode 100644 index 0000000..ee1c117 --- /dev/null +++ b/guide/task-server.html @@ -0,0 +1,28 @@ + + + + + + server 任务 | pipflow + + + + + + + + + + + + + + + + + +
Skip to content

server 任务

任务类型为 server

pipflowserver 服务是基于 browser-sync 实现的。无需配置,运行简单命令即可快速启动本地开发服务器。

本地开发服务

bash
pipflow dev
pipflow dev

本地开发服务通过 pipflow dev 命令启动,提供了文件监听、浏览器自动刷新、CSS 注入等功能,方便项目开发和调试。

如果是通过 pipflow create 创建的项目,无需任何配置,直接执行 npm run dev 即可启动开发服务器。

本地预览服务

bash
pipflow task server --preview
pipflow task server --preview

本地预览服务通过 pipflow task server --preview 启动,用于预览生产环境构建后的静态资源。

基于 pipflow 创建的项目,可以通过 npm run preview 快速预览构建产物 (服务器目录默认为构建目录)。

快速预览服务

bash
pipflow server
pipflow server

快速预览服务通过 pipflow server 命令启动,用于快速预览或演示单个 HTML 页面。

全局安装 @pipflow/cli 后,无需配置,可在任意目录启动服务器,同时也支持参数自定义,如端口、目录、是否监听文件变化、浏览器自动刷新等。

提示

以上 3 种服务器已覆盖大部分场景,一般无需在配置文件中自行配置 server 任务。

Released under the MIT License.

+ + + + \ No newline at end of file diff --git a/guide/task-style.html b/guide/task-style.html index 78f6e79..a702474 100644 --- a/guide/task-style.html +++ b/guide/task-style.html @@ -4,20 +4,183 @@ style 任务 | pipflow - + - + - - + + + + + + + -
Skip to content

style 任务

处理流程

CSS 预处理器

postcss集成

remtopx

pxtorem

pxtoview

Released under the MIT License.

- +
Skip to content

style 任务

任务类型为 style

style 任务用于处理 CSS 资源,主要包含 CSS 预处理、兼容性处理、压缩等功能。

任务流程

  • 环境变量替换 - 静态替换 env 对应的字符串
  • 别名替换 - 静态替换 alias 对应的字符串
  • CSS 预处理器编译
  • 自定义插件处理
  • postcss 处理 - 包含 属性兼容性前缀(autoprefixer)、压缩混淆(cssnano)等
  • 生成 source map 文件
  • 生成文件hash - 支持 [name]-[hash][name]?[hash] 两种方式。

文件入口

文件入口配置支持 单一字符串,数组,和对象 3 种方式。

js
// 1. 字符串
+{
+  input: './src/styles/**/*.{css,scss}'
+}
+
+// 2. 数组方式
+{
+  input: [
+    './src/styles/comm.css',
+    './src/styles/index.css',
+    './src/styles/page.css',
+  ]
+}
+
+// 3. 对象方式
+{
+  input: {
+    'comm/index': [
+      './src/styles/base.css',
+      './src/styles/utils.css',
+    ],
+    'index': './src/styles/index.css',
+    'pages': './src/styles/pages/*.css'
+  }
+}
// 1. 字符串
+{
+  input: './src/styles/**/*.{css,scss}'
+}
+
+// 2. 数组方式
+{
+  input: [
+    './src/styles/comm.css',
+    './src/styles/index.css',
+    './src/styles/page.css',
+  ]
+}
+
+// 3. 对象方式
+{
+  input: {
+    'comm/index': [
+      './src/styles/base.css',
+      './src/styles/utils.css',
+    ],
+    'index': './src/styles/index.css',
+    'pages': './src/styles/pages/*.css'
+  }
+}

CSS 预处理器

pipflow 支持 sass (scss), less, stylus 三种最常见的 CSS 预处理器。你只需在 style 类型任务的 compiler 属性中配置对应的预处理器即可。

为了编码方便,你还可以在转译时注入额外代码。

下面我们以 scss 为例进行简单配置:

js
// pipflow.config.js
+module.exports = {
+  tasks: [
+    // ... 其他任务
+    {
+      type: 'style',
+      input: './src/styles/**/*.scss',
+      compiler: 'sass',
+      compilerOptions: {
+        // 注入额外代码
+        additionalData: `@import './comm/variables';\n$--primary-color: blue;`,
+        // sass 选项
+        preprocessorOptions: {
+          includePaths: ['node_modules'], //支持加载npm包
+        }
+      }
+    }
+  ]
+}
// pipflow.config.js
+module.exports = {
+  tasks: [
+    // ... 其他任务
+    {
+      type: 'style',
+      input: './src/styles/**/*.scss',
+      compiler: 'sass',
+      compilerOptions: {
+        // 注入额外代码
+        additionalData: `@import './comm/variables';\n$--primary-color: blue;`,
+        // sass 选项
+        preprocessorOptions: {
+          includePaths: ['node_modules'], //支持加载npm包
+        }
+      }
+    }
+  ]
+}

additionalData 选项

所有预处理器都支持 additionalData 选项,可以用于为每个样式内容注入额外代码。请注意,如果注入的是实际的样式而不仅仅是变量时,那么这些样式将会在最终的打包产物中重复出现。

各预处理器使用详见:

PostCSS 插件

PostCSS 内置了众多插件用来转换 CSS, 你只需在项目的 postcss.config.js 文件中配置即可。目前 pipflow 已内置浏览器兼容性前缀(postcss-preset-env)和压缩优化(cssnano)插件。

这里列出一些常用的插件和用法示例,更多插件请参见 这里

pxtorem

px 单位转换为 rem 单位。 更多配置请参见 这里

js
// postcss.config.js
+module.exports = {
+  plugins: [
+    require('postcss-pxtorem')({
+      rootValue: 16,
+      propList: ['*'],
+      minPixelValue: 12,
+      exclude: /node_modules/i,
+    })
+  ]
+}
// postcss.config.js
+module.exports = {
+  plugins: [
+    require('postcss-pxtorem')({
+      rootValue: 16,
+      propList: ['*'],
+      minPixelValue: 12,
+      exclude: /node_modules/i,
+    })
+  ]
+}

pxtoview

将CSS中的 px 单位转换为 vw、vh 等视口单位。 更多配置请参见 这里

js
const px2viewport = require('postcss-px-to-viewport')
+
+module.exports = {
+  plugins: [
+    require('postcss-px-to-viewport')({
+      viewportWidth: 375,
+      unitPrecision: 5,
+      viewportUnit: 'vw',
+      propList: ['*'],
+      selectorBlackList: ["ignore"],
+      minPixelValue: 1,
+      mediaQuery: false
+    })
+  ]
+}
const px2viewport = require('postcss-px-to-viewport')
+
+module.exports = {
+  plugins: [
+    require('postcss-px-to-viewport')({
+      viewportWidth: 375,
+      unitPrecision: 5,
+      viewportUnit: 'vw',
+      propList: ['*'],
+      selectorBlackList: ["ignore"],
+      minPixelValue: 1,
+      mediaQuery: false
+    })
+  ]
+}

with Tailwind CSS

项目中集成 Tailwind CSS。 具体配置请参见 这里

  1. 通过 npm 安装 tailwindcss 及其依赖项,并创建 tailwind.config.js 文件。
bash
npm install -D tailwindcss autoprefixer
+npx tailwindcss init
npm install -D tailwindcss autoprefixer
+npx tailwindcss init
  1. 配置 tailwind.config.js
js
/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: ["./src/**/*.{html,js}"],
+  theme: {
+    extend: {},
+  },
+  plugins: [],
+}
/** @type {import('tailwindcss').Config} */
+module.exports = {
+  content: ["./src/**/*.{html,js}"],
+  theme: {
+    extend: {},
+  },
+  plugins: [],
+}
  1. 配置 postcss.config.js
js
module.exports = {
+  plugins: [
+    require('tailwindcss'),
+    require('autoprefixer')
+  ],
+}
module.exports = {
+  plugins: [
+    require('tailwindcss'),
+    require('autoprefixer')
+  ],
+}

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task-user.html b/guide/task-user.html index e639f35..ffc82d3 100644 --- a/guide/task-user.html +++ b/guide/task-user.html @@ -4,20 +4,64 @@ 自定义任务和流程 | pipflow - + - + - - + + + + + + + -
Skip to content

自定义任务和流程

扩展任务

对于已有的任务,如果不满足你的业务需求,你可以通过这个任务的 plugins 配置项来扩展当前任务。

比如,html 类型的任务默认处理流程会包含 模板引擎渲染、字符串内容替换、输出压缩、.... 等流程。如果你想在 html 类型任务中增加其他处理流程,可以通过 plugins 配置项来扩展任务。

示例: 在默认流程之外,动态插入一段html源码

js
const { defineConfig } = require('pipflow')
-const replace = require('gulp-replace')
+    
Skip to content

自定义任务和流程

扩展任务

对于已有的任务,如果不满足你的业务需求,你可以通过这个任务的 plugins 配置项来扩展当前任务。

例如,html 类型的任务默认处理流程包括 模板引擎渲染、字符串内容替换、资源文件指纹、输出压缩等流程。如果你想在 html 类型任务构建过程中增加其他处理流程,你可以这样配置:

比如在默认流程之外,动态插入一段 jquery外链源码

js
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const dom  = require('gulp-dom')
+
+module.exports = defineConfig({
+  tasks: [
+    {
+      type: 'html',
+      input: './src/**/*.html',
+      plugins: [
+        dom(function() {
+          return this.querySelectorAll('body')[0].insertAdjacentHTML(
+            'beforeend',
+            '<script src="https://unpkg.com/jquery/dist/jquery.js"></script>'
+          )
+        })
+      ]
+    }
+  ]
+})
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const dom  = require('gulp-dom')
+
+module.exports = defineConfig({
+  tasks: [
+    {
+      type: 'html',
+      input: './src/**/*.html',
+      plugins: [
+        dom(function() {
+          return this.querySelectorAll('body')[0].insertAdjacentHTML(
+            'beforeend',
+            '<script src="https://unpkg.com/jquery/dist/jquery.js"></script>'
+          )
+        })
+      ]
+    }
+  ]
+})

创建新任务

创建一个新任务非常简单,你只需要在配置文件 pipflow.config.jstasks 中增加一条任务项即可。

pipflow 的任务类型主要分为两大类:

  • 固定流程任务:内置了基础处理流程的任务。
  • 自定义流程任务:无内置流程,处理过程完全自主控制。

1. 创建固定流程任务

当任务类型不为 user 时为固定流程任务。

下面我们来创建一个使用 mustache 模板引擎(未内置) 的 html 类型任务。

js
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const mustache  = require('gulp-mustache')
 
 module.exports = defineConfig({
   tasks: [
@@ -25,12 +69,15 @@
       type: 'html',
       input: './src/**/*.html',
       plugins: [
-        // gulp-dom 插入代码
+        mustache({
+          title: 'Hello, Pipflow!',
+        })
       ]
     }
   ]
-})
const { defineConfig } = require('pipflow')
-const replace = require('gulp-replace')
+})
// pipflow.config.js
+const { defineConfig } = require('pipflow')
+const mustache  = require('gulp-mustache')
 
 module.exports = defineConfig({
   tasks: [
@@ -38,17 +85,20 @@
       type: 'html',
       input: './src/**/*.html',
       plugins: [
-        // gulp-dom 插入代码
+        mustache({
+          title: 'Hello, Pipflow!',
+        })
       ]
     }
   ]
-})

创建新任务

创建一个新任务非常简单,你只需要在配置文件pipflow.config.jstasks中增加一条任务项即可。

pipflow的任务类型主要分为两大类:

  • 固定流程任务:内置了基础的处理流程的任务。
  • 自定义流程任务:无内置流程,处理过程完全自主控制。

1. 固定流程任务

当任务类型不为 user 时为固定流程任务。

js
// html 其他模板引擎任务
// html 其他模板引擎任务

2. 自定义流程任务

当任务类型为 user 时为自定义流程任务。创建自定义流程任务的方式有两种:

  • plugins 方式
  • compiler 方式

这两种方式除了书写方式不同之外,没有其他区别。

2.1 plugins 方式

将处理流程写在 plugins 配置中。

js
// pipflow.config.js
+})

是不是非常简单?😀 😃 😄 😁 😆

2. 创建自定义流程任务

当任务类型为 user 时为自定义流程任务。创建自定义流程任务有两种方式:

  • plugins 方式
  • compiler 方式

这两种方式除了书写方式不同之外,没有其他区别。

2.1 plugins 方式

将处理流程写在 plugins 配置中。

js
// pipflow.config.js
 const gulp = require('gulp')
 const concat = require('gulp-concat')
 
 module.exports = {
   tasks: [
     {
+      name: 'build:css',
       type: 'user',
       plugins: [
         gulp.src('./src/**/*.css', { base: './src' }),
@@ -64,6 +114,7 @@
 module.exports = {
   tasks: [
     {
+      name: 'build:css',
       type: 'user',
       plugins: [
         gulp.src('./src/**/*.css', { base: './src' }),
@@ -72,7 +123,7 @@
       ]
     }
   ]
-}

或者,你可以简化成如下形式

js
// pipflow.config.js
+}

或者,你可以简化为如下形式

js
// pipflow.config.js
 const concat = require('gulp-concat')
 
 module.exports = {
@@ -98,7 +149,7 @@
       ]
     }
   ]
-}

TIP

你如果配置了 input 属性,在gulp的处理过程中会自动增加文件的输入流和输出流。你只需要在plugins中配置处理流程所需要的插件即可。

2.2 compiler 方式

compiler 作为一个任务函数。它和定义一个gulp任务是一样的。

js
// pipflow.config.js
+}

TIP

如果配置了 input 属性,在gulp的处理过程中会自动增加文件的输入流和输出流。你只需要在plugins中配置处理流程所需要的插件即可。

2.2 compiler 方式

compiler 作为一个任务函数。它和定义一个gulp任务是一样的。

js
// pipflow.config.js
 const gulp = require('gulp')
 const concat = require('gulp-concat')
 
@@ -166,7 +217,7 @@
       ]
     }
   ]
-})

入口说明

compose 任务中,input入口和其他类型任务有些不同,其 input 值是一个二维数组 string[][],数组的每一项是一个任务名。

input 的值转换后的结果:

js
series(parallel('任务名', ...), parallel(...), ...)
series(parallel('任务名', ...), parallel(...), ...)
  • 数组列表表示一个串联任务,其内部是通过 series 方法执行的。
  • 数组的子项表示一个并行任务,其内部是通过 parallel 方法执行的。
  1. 执行新任务,构建用于预发布环境的应用程序包。执行如下命令:
bash
pipflow task build:stag --mode=staging
pipflow task build:stag --mode=staging

为了方便发布,你可以在 package.jsonscripts 字段内添加 build:stag 脚本

json
{
+})

入口说明

compose 任务中,input入口和其他类型任务有些不同,其 input 值是一个二维数组 string[][],数组的每一项是一个任务名。

下面是 input 的值转换后的结果:

js
series(parallel('任务名', ...), parallel(...), ...)
series(parallel('任务名', ...), parallel(...), ...)
  • 数组列表表示一个串联任务,其内部是通过 series 方法执行的。
  • 数组的子项表示一个并行任务,其内部是通过 parallel 方法执行的。
  1. 执行新任务,构建用于预发布环境的应用程序包。执行如下命令:
bash
pipflow task build:stag --mode=staging
pipflow task build:stag --mode=staging

为了方便发布,你可以在 package.jsonscripts 字段内添加 build:stag 脚本

json
{
   "scripts": {
     "dev": "pipflow dev",
     "build": "pipflow build",
@@ -178,8 +229,8 @@
     "build": "pipflow build",
     "build:stag": "cross-env NODE_ENV=production pipflow task build:stag --mode=staging" 
   }
-}

TIP

如果当前主机的环境变量 NODE_ENV 未知或不为 production ,那么请在执行的命令前加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction

Released under the MIT License.

- +}

TIP

如果当前主机的环境变量 NODE_ENV 未知或不为 production ,那么请在执行的命令前加上 cross-env NODE_ENV=production (确保构建主机的环境变量 NODE_ENVproduction

Released under the MIT License.

+ \ No newline at end of file diff --git a/guide/task.html b/guide/task.html index ee84b0b..b51ca51 100644 --- a/guide/task.html +++ b/guide/task.html @@ -4,20 +4,25 @@ 概要 | pipflow - + - + - - + + + + + + + -
Skip to content

概要

pipflow 内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。

主要任务类型包含:

  • html - HTML处理任务
  • script - JavaScript处理任务
  • style - CSS处理任务
  • static - 静态资源处理任务
  • image - 图片资源处理任务
  • server - 创建本地服务器任务
  • copy - 复制文件任务
  • remove - 删除文件任务
  • archive - 打包压缩任务
  • user - 用户自定义任务
  • compose - 组合任务

基于以上任务类型,你可以很容易的实现各种构建任务。既可以在已有的任务上扩展,也可以创建新的任务,还可以将已有任务和新增任务组合成新的构建任务。

下面我将详细介绍每一个任务类型,及其使用方法。

Released under the MIT License.

- +
Skip to content

概要

pipflow 内置一套完整的构建流程和多类型构建任务,实现资源的自动化处理。

主要任务类型包含:

  • html - HTML处理任务,可用于 HTML 文件的语法检查、模板渲染、压缩等
  • script - JavaScript处理任务,可用于 JavaScript 文件的语法检查、美化、压缩、打包等
  • style - CSS处理任务,可用于 CSS 预处理器编译、美化、压缩等处理
  • static - 静态资源处理任务,可用于图片、字体等静态资源的优化、复制等处理
  • image - 图片资源处理任务,专门用于图片资源的压缩、格式转换等处理
  • server - 创建本地服务器任务,可以快速创建一个本地开发服务器
  • copy - 复制文件任务
  • remove - 删除文件任务
  • archive - 打包压缩任务,可以将文件打包成 zip 压缩包
  • user - 用户自定义任务,自定义一些全新任务,完全自主控制处理流程
  • compose - 组合任务,将已有任务组合成一个新任务,实现更复杂的构建处理

基于以上核心任务类型,可以通过配置实现自动化的资源处理,比如:

  • HTML/CSS/JS 的语法检查和压缩
  • 图片压缩和格式转换
  • 打包和发布等处理

你可以在已有的任务基础上进行扩展,也可以创建全新的任务,还可以将已有任务和新增任务组合成新的构建任务,极大提高工作效率。

下面我将详细介绍每一个任务类型,及其使用方法。

Released under the MIT License.

+ \ No newline at end of file diff --git a/hashmap.json b/hashmap.json index 5611aff..5a6c830 100644 --- a/hashmap.json +++ b/hashmap.json @@ -1 +1 @@ -{"guide_assets.md":"0bca6177","guide_task-style.md":"5c05796b","config_build-options.md":"30c53ed9","guide_help.md":"f61c126f","guide_index.md":"da7ed5a6","config_index.md":"4d8358d1","config_shared-options.md":"ebf18efd","guide_task-script.md":"f1baca51","api-examples.md":"3cc500bc","guide_build.md":"14f3acdc","config_task-options.md":"3ea29b52","guide_task-assets.md":"f8abe48e","config_server-options.md":"b94fc321","index.md":"3a317510","markdown-examples.md":"70dfad91","guide_task.md":"61077b6b","guide_task-more.md":"2339473a","guide_cli.md":"cc1e1b7e","guide_task-user.md":"b35cd93b","guide_env-and-mode.md":"ef70d3e8","guide_task-html.md":"77c7b164"} +{"config_build-options.md":"83f54696","config_shared-options.md":"0b6e8efc","guide_task-html.md":"5a49ced7","guide_task-script.md":"87f4e01c","config_task-options.md":"2736a7fe","guide_build.md":"d0548d4d","guide_task-more.md":"a1052ad8","config_index.md":"70a8d4ed","markdown-examples.md":"9ec7908f","guide_task-assets.md":"6a825859","guide_env-and-mode.md":"457988dd","config_server-options.md":"38b44b96","guide_assets.md":"38934978","guide_task-server.md":"3c7b4701","api-examples.md":"408aa431","index.md":"de590694","guide_cli.md":"b7fe1365","guide_task-user.md":"db078580","help.md":"1e53339b","guide_index.md":"df62155d","guide_task-style.md":"90987ce7","guide_task.md":"965c5267"} diff --git a/help.html b/help.html new file mode 100644 index 0000000..776e774 --- /dev/null +++ b/help.html @@ -0,0 +1,28 @@ + + + + + + 常见问题 | pipflow + + + + + + + + + + + + + + + + + +
Skip to content

常见问题

1. 安装依赖时间过长

  1. 设置 .mpmrc
bash
registry=https://registry.npmmirror.com/
registry=https://registry.npmmirror.com/
  1. 使用 cnpm

2. 安装依赖失败

经常碰到安装依赖失败,多数是因为网络原因:很多包将源码托管在 s3 服务器上,国内可能无法访问。

Released under the MIT License.

+ + + + \ No newline at end of file diff --git a/index.html b/index.html index 1f1d366..8a5406c 100644 --- a/index.html +++ b/index.html @@ -3,21 +3,26 @@ - pipflow | 基于gulp的web开发工作流,内置合并、编译、打包、压缩等功能,极大简化前端开发流程 - + pipflow | 基于gulp工作流的前端构建工具,内置合并、编译、打包、压缩等功能,极大简化前端开发流程 + - + - - + + + + + + + -
Skip to content

Pipflow

开箱即用的前端开发工作流

旨在使web应用程序的开发/构建流程变得更简单!

Released under the MIT License.

- +
Skip to content

Pipflow

开箱即用的前端开发工作流

旨在使web应用程序的开发/构建流程变得更简单!

Released under the MIT License.

+ \ No newline at end of file diff --git a/markdown-examples.html b/markdown-examples.html index eee2491..f0c03dc 100644 --- a/markdown-examples.html +++ b/markdown-examples.html @@ -4,19 +4,24 @@ Markdown Extension Examples | pipflow - + - + - - + + + + + + + -
Skip to content

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

```js{4}
+    
Skip to content

Markdown Extension Examples

This page demonstrates some of the built-in markdown extensions provided by VitePress.

Syntax Highlighting

VitePress provides Syntax Highlighting powered by Shiki, with additional features like line-highlighting:

Input

```js{4}
 export default {
   data () {
     return {
@@ -80,8 +85,8 @@
 
 ::: details
 This is a details block.
-:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

Released under the MIT License.

- +:::

Output

INFO

This is an info box.

TIP

This is a tip.

WARNING

This is a warning.

DANGER

This is a dangerous warning.

Details

This is a details block.

More

Check out the documentation for the full list of markdown extensions.

Released under the MIT License.

+ \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 126a134..98bb45e 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://pipflow.mengqing.org/api-examples.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/config/build-options.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/config/2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/config/server-options.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/config/shared-options.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/config/task-options.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/assets.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/build.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/cli.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/env-and-mode.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/help.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-assets.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-html.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-more.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-script.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-style.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task-user.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/guide/task.html2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/2023-11-11T13:59:09.000Zhttps://pipflow.mengqing.org/markdown-examples.html2023-11-11T13:59:09.000Z \ No newline at end of file +https://pipflow.mengqing.org/api-examples.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/config/build-options.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/config/2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/config/server-options.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/config/shared-options.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/config/task-options.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/assets.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/build.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/cli.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/env-and-mode.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-assets.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-html.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-more.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-script.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-server.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-style.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task-user.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/guide/task.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/help.html2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/2023-12-12T02:13:28.000Zhttps://pipflow.mengqing.org/markdown-examples.html2023-12-12T02:13:28.000Z \ No newline at end of file