<article><h1>Laravel 的前端資源處理 JavaScript 和 CSS 構建</h1><ul><li><a href="#introduction">簡介</a></li><li><a href="#writing-css">編寫 CSS</a></li><li><a href="#writing-javascript">編寫 JavaScript</a><ul><li><a href="#writing-vue-components">編寫 Vue 組件</a></li></ul></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">簡介</a></h2><p>Laravel 并沒有規定你使用哪個 JavaScript 或 CSS 預處理器,不過默認提供了對大多數應用都很適用的 <a href="http://getbootstrap.com">Bootstrap</a> 和 <a href="https://vuejs.org">Vue</a> 來作為起點。 Laravel 默認使用 <a href="https://npmjs.org">NPM</a> 安裝這些前端的依賴。</p><h4>CSS</h4><p><a href="/docs/5.4/mix">Laravel Mix</a> 提供了一個簡潔、富有表現力的 API 來編譯 SASS 或 Less,這些 CSS 預處理語言擴充了 CSS 語言,增加了諸如變量、混合(mixins)及其他一些強大的功能讓編寫 CSS 代碼變得更加有趣。</p><p>盡管我們會在這里簡要的討論 CSS 編譯的內容,但是,你應該訪問 <a href="/docs/5.4/mix">Laravel Mix 文檔</a> 獲取更多關于編譯 SASS 或 Less 的信息。</p><h4>JavaScript</h4><p>Laravel 并不需要你使用特定的 JavsScript 框架或者庫來構建應用程序。事實上,你也可以完全不用 JavaScript。不過,Laravel 自帶了用 <a href="https://vuejs.org">Vue</a> 實現的基本腳手架代碼來幫你更輕松的開始現代化 JavaScript 編碼。Vue 提供了強大的組件化 API 用來構建健壯的 JavaScript 應用程序。</p><p><a name="writing-css"></a></p><h2><a href="#writing-css">編寫 CSS</a></h2><p>在 Laravel 的根目錄中的 <code class=" language-php">Package<span class="token punctuation">.</span>json</code> 文件引入了 <code class=" language-php">bootstrap<span class="token operator">-</span>sass</code> 依賴包可以幫助你使用 Bootstrap 制作應用程序的前端原型。不過,你可以根據自己應用程序的需要在 <code class=" language-php">package<span class="token punctuation">.</span>json</code> 靈活的添加或者移除依賴包。使用 Bootstrap 框架來構建你的 Laravel 應用程序并不是必選項,它只是給那些想用它的人提供一個很好的起點。</p><p>編譯 CSS 代碼之前,需要你先使用 NPM 來安裝前端的依賴:</p><pre class=" language-php"><code class=" language-php">npm install</code></pre><p>使用 <code class=" language-php">npm install</code> 成功安裝依賴之后,你就可以使用 <a href="/docs/5.4/mix#working-with-stylesheets">Laravel Mix</a> 來將 SASS 文件編譯為純 CSS。.<code class=" language-php">npm run dev</code> 命令會執行處理 <code class=" language-php">webpack<span class="token punctuation">.</span>mix<span class="token punctuation">.</span>js</code> 文件中的指令。通常情況下,編譯好的 CSS 代碼會被放置在 <code class=" language-php"><span class="token keyword">public</span><span class="token operator">/</span>css</code> 目錄:</p><pre class=" language-php"><code class=" language-php">npm run dev</code></pre><p>默認情況下,<code class=" language-php">webpack<span class="token punctuation">.</span>mix<span class="token punctuation">.</span>js</code> 會編譯 <code class=" language-php">resources<span class="token operator">/</span>assets<span class="token operator">/</span>sass<span class="token operator">/</span>app<span class="token punctuation">.</span>scss</code> SASS 文件。<code class=" language-php">app<span class="token punctuation">.</span>scss</code> 文件導入了一個包含 SASS 變量的文件,加載了 Bootstrap 框架,這對大多數程序來說是一個很好的出發點。你也可以根據自己的需要去定制 <code class=" language-php">app<span class="token punctuation">.</span>scss</code> 文件的內容,甚至使用完全不同的預處理器,詳細配置見 <a href="/docs/5.4/mix">配置 Laravel Mix</a>。</p><p><a name="writing-javascript"></a></p><h2><a href="#writing-javascript">編寫 JavaScript</a></h2><p>在項目根目錄中的 <code class=" language-php">package<span class="token punctuation">.</span>json</code> 可以找到應用程序的所有 JavaScript 依賴。它和 <code class=" language-php">composer<span class="token punctuation">.</span>json</code> 文件類似,不同的是它指定的是 JavaScript 的依賴而不是 PHP 的依賴。使用 <a href="https://npmjs.org">Node 包管理器 (NPM)</a> 來安裝這些依賴包:</p><pre class=" language-php"><code class=" language-php">npm install</code></pre><p>Laravel <code class=" language-php">package<span class="token punctuation">.</span>json</code> 文件默認會包含一些依賴包來幫助你開始建立 JavaScript 應用程序,例如 <code class=" language-php">vue</code> 和 <code class=" language-php">axios</code> 。你可以根據自己程序的需要在 <code class=" language-php">package<span class="token punctuation">.</span>json</code> 中添加或者移除依賴。</p><p>成功安裝依賴之后,你就可以使用 <code class=" language-php">npm run dev</code> 命令來 <a href="/docs/5.4/mix">編譯資源文件</a> 。Webpack 是一個為現代 JavaScript 應用而生的模塊構建工具。當你運行 <code class=" language-php">npm run dev</code> 命令時,Webpack 會執行 <code class=" language-php">webpack<span class="token punctuation">.</span>mix<span class="token punctuation">.</span>js</code> 文件中的指令:</p><pre class=" language-php"><code class=" language-php">npm run dev</code></pre><p>默認情況下,<code class=" language-php">webpack<span class="token punctuation">.</span>mix<span class="token punctuation">.</span>js</code> 會編譯 SASS 文件和 <code class=" language-php">resources<span class="token operator">/</span>assets<span class="token operator">/</span>js<span class="token operator">/</span>app<span class="token punctuation">.</span>js</code> 文件。你可以在 <code class=" language-php">app<span class="token punctuation">.</span>js</code> 文件中注冊你的 Vue 組件,或者如果你更喜歡其他的框架,也可以在這里進行配置。編譯好的 JavaScript 文件通常會放置在 <code class=" language-php"><span class="token keyword">public</span><span class="token operator">/</span>js</code> 目錄。</p><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> <code class=" language-php">app<span class="token punctuation">.</span>js</code> 會加載 <code class=" language-php">resources<span class="token operator">/</span>assets<span class="token operator">/</span>js<span class="token operator">/</span>bootstrap<span class="token punctuation">.</span>js</code> 文件來啟動、 配置 Vue,Vue Resource,jQuery,以及其他的 JavaScript 依賴。如果你有額外的 JavaScript 依賴需要去配置,你也可以在這個文件中完成。</p></blockquote><p><a name="writing-vue-components"></a></p><h3>編寫 Vue 組件</h3><p>全新安裝的 Laravel 程序默認會在 <code class=" language-php">resources<span class="token operator">/</span>assets<span class="token operator">/</span>js<span class="token operator">/</span>components</code> 中包含一個 <code class=" language-php">Example<span class="token punctuation">.</span>vue</code> 的 Vue 組件。<code class=" language-php">Example<span class="token punctuation">.</span>vue</code> 文件是一個 <a href="https://vuejs.org/guide/application.html#Single-File-Components">單文件 Vue 組件</a> 的示例,單文件 Vue 組件允許我們在同一個文件中編寫 JavaScript 和 HTML 模板,它提供了一種非常方便的方式去構建 JavaScript 驅動的應用程序。這個示例組件注冊在 <code class=" language-php">app<span class="token punctuation">.</span>js</code> 文件。</p><pre class=" language-php"><code class=" language-php">Vue<span class="token punctuation">.</span><span class="token function">component<span class="token punctuation">(</span></span><span class="token string">'example'</span><span class="token punctuation">,</span> <span class="token keyword">require</span><span class="token punctuation">(</span><span class="token string">'./components/Example.vue'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>在應用程序中使用示例組件,你只需要簡單的將其放到你的 HTML 模板之中。例如,在你運行 <code class=" language-php">make<span class="token punctuation">:</span>auth</code> Artisan 命令去生成應用的用戶認證和注冊的腳手架頁面后,你可以把組件放到 <code class=" language-php">homde<span class="token punctuation">.</span>blade<span class="token punctuation">.</span>php</code> Blade 模板:</p><pre class=" language-php"><code class=" language-php">@<span class="token keyword">extends</span><span class="token punctuation">(</span><span class="token string">'layouts.app'</span><span class="token punctuation">)</span>
@<span class="token function">section<span class="token punctuation">(</span></span><span class="token string">'content'</span><span class="token punctuation">)</span>
<span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>example</span><span class="token punctuation">></span></span></span><span class="token markup"><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>example</span><span class="token punctuation">></span></span></span>
@endsection</code></pre><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> 謹記,你需要在每次修改 Vue 組件后都需要運行 <code class=" language-php">npm run dev</code> 命令。或者,你可以使用 <code class=" language-php">npm run watch</code> 命令來監控并在每次文件被修改時自動重新編譯組件。</p></blockquote><p>當然,如果你對學習更多編寫 Vue 組件的內容感興趣,你可以讀一下 <a href="http://vuejs.org/guide/">Vue 官方引導文檔</a>,它提供了一個透徹、易懂的文檔讓你一覽 Vue 框架的概貌。</p></article>
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 請求周期
- 開發環境部署
- Valet
- Homestead
- 核心概念
- 服務提供者
- Facades
- Contracts
- 服務容器
- HTTP 層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- API 認證
- 用戶認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- Redis
- 數據填充
- Eloquent ORM
- Eloquent ORM快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度