請注意: 此頁為 Parcel 1 的說明,Parcel 2 版本的說明頁面尚未完成。

JavaScript

支援的副檔名:jsjsxes6jsmmjs

網頁打包工具中最傳統的檔案類型就是 JavaScript 了,Parcel 支援 CommonJS 及 ES6 的模組匯入語法,也支援非同步載入的動態的 import() 函式,詳情請見程式碼分離一章。另外動態載入也可從 URL 載入模組。

// 使用 CommonJS 語法匯入模組
const dep = require('./path/to/dep')

// 使用 ES6 匯入語法匯入模組
import dep from './path/to/dep'

// 從 URL (如 CDN)動態載入模組
import('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js').then(() => {
  console.log(_.VERSION);
});

你也可以在 JavaScript 中匯入非 JavaScript 的檔案,像是 CSS、HTML 甚至是影像檔。當你匯入這些檔案時,Parcel 會將所有的相依檔案放在另外的 bundle,不像其他打包工具將檔案直接插入於行內。

當你使用 CSS Modules 時,匯出的類別將會置於 JavaScript bundle 內。

其餘的資源類型會在 JavaScript bundle 中匯出一個 URL ,好讓你可以在程式碼中引用這些輸出的檔案。

// 匯入 CSS 檔案
import './test.css'

// 由 CSS 模組匯入 CSS 檔
import classNames from './test.css'

// 由 URL 匯入影像檔
import imageURL from './test.png'

// 匯入 HTML 檔案
import('./some.html')
// 或者:
import html from './some.html'
// 也可以這樣:
require('./some.html')

若你不想使用 URL 引入檔案,而是將檔案直接插入於行內的話,你可以透過 Node.js 的 fs.readFileSync API 來達成。 其中的 URL 必須是靜態可分析,意即 URL 不能包含除了 __dirname__filename 以外的任何變數。

import fs from 'fs'

// 將檔案內容讀取為文字
const string = fs.readFileSync(__dirname + '/test.txt', 'utf8')

// 將檔案內容讀取為 Buffer
const buffer = fs.readFileSync(__dirname + '/test.png')

// 將 Buffer 內容轉換為影像
;<img src={`data:image/png;base64,${buffer.toString('base64')}`} />

在 JSX 中使用影像檔

下列是在 JSX 中匯入影像檔的範例:

// 匯入影像檔
import megaMan from "./images/mega-man.png";

// JSX
<img src={megaMan} title="Mega Man" alt="Mega Man" />

// JSX (使用自訂路徑)
<img src={`/dist${megaMan}`} title="Mega Man" alt="Mega Man" />

Babel

Babel 是款熱門且擁有龐大外掛生態系的 JavaScript 轉譯器。其使用方式跟直接執行或在其他打包工具中相同。

在你的 app 中安裝 preset 和外掛:

yarn add --dev babel-preset-react

接著建立 .babelrc

{
  "presets": ["@babel/preset-react"]
}

你也可以在 package.json 中指定 babel 設定

"babel": {
  "presets": ["@babel/preset-react"]
}

注意:package.json 優先度大於 .babelrc

預設的 Babel 轉換

Parcel 預設使用 @babel/preset-env 並轉譯你的程式碼(包含每個內部模組)以符合目標定義。

Parcel 會使用 browserslist 來處理 browser 環境。browserlist 的目標設定可在 package.jsonengines.browsersbrowserslist)中定義,或是使用設定檔 (browserslist.browserslistrc) 來定義。

browserlist 預設的支援目標為 > 0.25%,也就是那些用戶多於 0.25% 的瀏覽器。

針對 node 環境,Parcel 則使用 package.json 中的 engines.node 設定值,此設定預設為 node 8

Flow

flow 是款 JavaScript 的靜態類型檢查工具。在 Parcel 中使用 Flow 相當容易,只要將 // @flow 置於你的 js 檔案的第一行即可。

Parcel 會自動安裝必要的 Babel 設定檔以將 Flow 類別從編譯後的輸出檔中剝離,因此你什麼都不需要擔心,除了兩件事:編輯器整合及利用 .flowconfig 來支援絕對路徑的解析

協助我們讓本文件更加完善

若有什麼內容遺漏了或是敘述不清楚的地方,請在本站的 repository 中開啟一個 issue 或者編輯此頁面