本文將說明如何執行下列操作:
事前準備
- 前往 Google Cloud 控制台的「Dataform」頁面。 
- 執行下列任一操作或同時完成兩者: - 如要在存放區中安裝套件,或驗證私人 NPM
套件以啟用安裝,請按照下列步驟操作:
- 選取或建立存放區。
- 選取或建立開發工作區。
- 選用:如要安裝私人套件,請驗證私人套件。
- 如果存放區不含 package.json檔案,請建立package.json並移動 Dataform 核心套件。
 
- 如要建立套件,請按照下列步驟操作:
- 建立專用於套件的 Dataform 存放區。將存放區名稱與套件名稱相符。
- 將存放區連結至第三方 Git 存放區,該存放區將代管您的套件。
- 在 Dataform 存放區中建立並初始化工作區。
 
 
- 如要在存放區中安裝套件,或驗證私人 NPM
套件以啟用安裝,請按照下列步驟操作:
- 請確認您具備必要權限,可以完成本文中的工作。 
必要的角色
如要取得完成本文工作所需的權限,請要求管理員授予下列 IAM 角色:
- 
  
  
    
      Dataform 編輯器  (roles/dataform.editor) 工作區和存放區
- 
  
  
    
      Dataform 管理員  (roles/dataform.admin) 存放區
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
安裝套件
本節說明如何安裝 JavaScript 套件,並將其匯入 JavaScript 檔案和 SQLX 檔案,以便在 Dataform 中使用該套件開發工作流程。
如要在 Dataform 中使用套件,您必須在存放區中安裝套件。
您可以在 Dataform 中安裝下列類型的套件:
- 已發布的公開 NPM 套件
- 未發布的公開 NPM 套件
- 經過驗證的私人 NPM 套件
接著,如要在 JavaScript 或 SQLX 檔案中使用套件,您需要將套件的所選內容匯入檔案。您也可以將整個套件匯入 JavaScript 或 SQLX 檔案,而非匯入所選內容。
為避免在實際工作環境中安裝套件時發生問題,建議您採取下列做法:
- 在 - package.json中明確指定套件版本,例如- 3.0.0。請勿使用其他- dependencies選項,例如- package.json。- >version
- 在非正式環境中測試新版套件。如要進一步瞭解如何設定不同的工作流程生命週期環境,請參閱「工作流程生命週期的最佳做法」。 
將套件新增為依附元件
如要在 Dataform 存放區中安裝套件,您需要在 package.json 檔案中將套件新增為依附元件:
- 在工作區的「檔案」窗格中,選取 package.json。
- 將套件新增至 - dependencies區塊:- 新增已發布的公開 NPM 套件,格式如下: - "PACKAGE-NAME": "PACKAGE-VERSION"- 更改下列內容: - PACKAGE-NAME 替換為套件名稱。
- PACKAGE-VERSION,並使用已發布的公開 NPM 套件最新版本。為避免套件安裝問題,請明確指定版本,例如 3.0.0。
 
- 新增未發布的公開 NPM 套件,格式如下: - "PACKAGE-NAME": "PACKAGE-URL"- 更改下列內容: - PACKAGE-NAME 替換為套件名稱。
- PACKAGE-URL,並將 tar.gz設為第三方套件存放區的網址,例如https://github.com/user/sample-package-repository/archive/master.tar.gz。
 
- 以以下格式新增經過驗證的私人 NPM 套件: - "REGISTRY-SCOPE/PACKAGE-NAME": "PACKAGE-URL"- 更改下列內容: - REGISTRY-SCOPE 替換為套件名稱。
REGISTRY-SCOPE 必須與存放區 .nmprc檔案中定義的登錄範圍相符。
- PACKAGE-NAME 替換為套件名稱。
- PACKAGE-URL,其中 tar.gz是套件存放區的網址,例如https://github.com/user/sample-package-repository/archive/master.tar.gz。
 
- REGISTRY-SCOPE 替換為套件名稱。
REGISTRY-SCOPE 必須與存放區 
 
- 按一下「安裝套件」。 
下列程式碼範例顯示新增至 .package.json 檔案的公開開放原始碼 Slowly changing dimensions 套件:
 ```json
 {
   "name": "repository-name",
   "dependencies": {
     "@dataform/core": "2.0.3",
     "dataform-scd": "https://github.com/dataform-co/dataform-scd/archive/0.3.tar.gz"
   }
 }
 ```
將套件函式或常數匯入 Dataform 的 JavaScript 檔案
如要在 Dataform 的 JavaScript 檔案中使用套件中的函式或常數,請先將其匯入檔案。
如要將函式或常數從套件匯入 JavaScript 檔案,請按照下列步驟操作:
- 在工作區的「檔案」窗格中,選取要使用套件的 .js檔案。
- 在檔案中,以以下格式匯入函式或常數: - const { EXPORT-NAME } = require("PACKAGE-NAME");- 將 EXPORT-NAME 替換為您要使用的函式或常數名稱,該名稱在套件 index.js檔案的module.exports中宣告。
- 將 PACKAGE-NAME 替換為您要使用的套件名稱。
 
- 將 EXPORT-NAME 替換為您要使用的函式或常數名稱,該名稱在套件 
下列程式碼範例顯示從 postoffice 套件匯入的 getDomain 函式,並在 JavaScript 檔案中使用:
/*
 * Contents of postoffice index.js:
 * module.exports = { getDomain };
 */
const { getDomain } = require("postoffice");
getDomain();
將整個套件匯入 Dataform 的 JavaScript 檔案
如要將整個套件匯入 JavaScript 檔案,而不是將所選函式或常數匯入 JavaScript 檔案,請按照下列步驟操作:
- 在工作區的「檔案」窗格中,選取要使用套件的 .js檔案。
- 在檔案中,以以下格式匯入套件: - const CONSTANT-NAME = require("PACKAGE-NAME");- 將 CONSTANT-NAME 替換為常數的名稱。
- 將 PACKAGE-NAME 替換為您要使用的套件名稱。
 
下列程式碼範例顯示 JavaScript 檔案中使用的 postoffice 套件匯入 getDomain 函式:
/*
 * Contents of postoffice index.js:
 * module.exports = { getDomain };
 */
const postoffice = require("postoffice");
postoffice.getDomain();
將套件函式或常數匯入 Dataform 的 SQLX 檔案
如要在 SQLX 檔案中使用套件中的函式或常數,請先將其匯入檔案。
如要將套件中的函式或常數匯入 SQLX 檔案,請按照下列步驟操作:
- 在工作區的「檔案」窗格中,選取要使用套件的 .sqlx檔案。
- 在檔案中輸入下列 - js區塊:- js { const { EXPORT-NAME } = require("PACKAGE-NAME"); }- 將 EXPORT-NAME 替換為您要使用的函式或常數名稱,並在套件 index.js檔案的module.exports中宣告。
- 將 PACKAGE-NAME 替換為您要使用的套件名稱。
 
- 將 EXPORT-NAME 替換為您要使用的函式或常數名稱,並在套件 
下列程式碼範例顯示在 js 區塊中匯入的 postoffice 套件中的 getDomain 函式,以及在 SQLX 檔案的 SELECT 陳述式中使用的函式:
/*
 * Contents of postoffice index.js:
 * module.exports = { getDomain };
 */
config {
    type: "table",
}
js {
  const { getDomain } = require("postoffice");
}
SELECT ${getDomain("email")} as test
將整個套件匯入 Dataform 的 SQLX 檔案
如要將整個套件匯入 SQLX 檔案,而不是將選取的函式或常數匯入 JavaScript 檔案,請按照下列步驟操作:
- 在工作區的「檔案」窗格中,選取要使用套件的 .sqlx檔案。
- 在檔案中,以以下格式匯入套件: - js { const CONSTANT-NAME = require("PACKAGE-NAME"); }- 將 CONSTANT-NAME 替換為常數的名稱。
- 將 PACKAGE-NAME 替換為您要使用的套件名稱。
 
下列程式碼範例顯示在 js 區塊中匯入的 postoffice 套件,以及在 SQLX 檔案的 SELECT 陳述式中使用的 getDomain 函式:
/*
 * Contents of postoffice index.js:
 * module.exports = { getDomain };
 */
config {
    type: "table",
}
js {
  const postoffice = require("postoffice");
}
SELECT ${postoffice.getDomain("email")} as test
驗證私人套件
本節說明如何在 Dataform 中驗證私人 NPM 套件,以便在 Dataform 存放區中安裝該套件。
如要在 Dataform 存放區中安裝私人 NPM 套件,並使用該套件開發工作流程,請先在 Dataform 中驗證套件。存放區中的第一個私人套件和後續私人套件的驗證程序不同。
在 Dataform 存放區中驗證第一個私人套件
如要在 Dataform 中驗證私人 npm 套件,請先在 Dataform 存放區中安裝第一個私人 npm 套件,然後執行下列操作:
- 建立 Secret Manager 密鑰,專門用於在 Dataform 存放區中儲存私人 NPM 套件的驗證權杖。 - 將從 NPM 登錄檔取得的套件驗證權杖新增至密鑰。
 - 您需要將私人 NPM 套件的所有驗證權杖,儲存在存放區的單一密鑰中。您必須為每個 Dataform 存放區建立專屬密鑰。密鑰必須採用 JSON 格式。 
- 將密鑰上傳至 Dataform 存放區。 
- 
.npmrc檔案中的驗證權杖必須與上傳的密鑰中的驗證權杖相符。
驗證私人 NPM 套件後,您就可以在 Dataform 存放區中安裝套件。
建立密鑰,驗證私人套件
如要在 Dataform 存放區中驗證私人 NPM 套件,您需要建立 Secret Manager 密鑰,並在密鑰中為要安裝在 Dataform 存放區中的所有私人套件定義驗證權杖。為每個私人 NPM 套件定義一個驗證權杖,並將所有驗證權杖儲存在每個存放區的單一密碼中。密鑰必須採用 JSON 格式。
如要建立含有私人 NPM 套件驗證權杖的密鑰,請按照下列步驟操作:
- 在 Secret Manager 中建立密鑰。 - 在「Secret value」(密鑰值) 欄位中,輸入一或多個驗證權杖,格式如下:
 - { "AUTHENTICATION_TOKEN_NAME": "TOKEN_VALUE" }- 更改下列內容: - AUTHENTICATION_TOKEN_NAME:權杖的專屬名稱,用於識別驗證的套件。
- TOKEN_VALUE:驗證權杖的值,可從 NPM 登錄檔取得。
 
- 將密鑰存取權授予 Dataform 服務代理或自訂服務帳戶。 - Dataform 服務代理程式或自訂服務帳戶的格式如下: - service-PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com- 授予存取權時,請務必將 roles/secretmanager.secretAccessor角色授予 Dataform 服務代理人或自訂服務帳戶。
 
- 授予存取權時,請務必將 
將私人套件的驗證密鑰上傳至 Dataform 存放區
首次在 Dataform 存放區中安裝私人 NPM 套件前,請先將含有套件驗證權杖的密鑰上傳至存放區。
如要將含有私人 NPM 套件驗證權杖的密鑰上傳至 Dataform 存放區,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Dataform」頁面。 
- 選取要安裝私人 NPM 套件的存放區。 
- 在存放區頁面中,依序點選「設定」> 設定私有 NPM 套件。 
- 在「新增 NPM 套件密鑰權杖」窗格的「密鑰」選單中,選取含有私人 NPM 套件驗證權杖的密鑰。 
- 按一下 [儲存]。 
建立 .npmrc 檔案,驗證私有套件
如要在 Dataform 存放區中驗證私人 NPM 套件,您需要在存放區中建立頂層 .npmrc 檔案。您需要在 .npmrc 檔案中,儲存要在存放區中安裝的所有私人 NPM 套件的驗證權杖。.npmrc 檔案中的驗證權杖必須與上傳至存放區的密鑰中的驗證權杖相符。如要進一步瞭解 .npmrc 檔案,請參閱 npmrc 說明文件。
如要在存放區中建立頂層 .npmrc 檔案,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Dataform」頁面。 
- 選取要安裝私有 NPM 套件的存放區,然後選取工作區。 
- 在「Files」(檔案) 窗格中,依序點選 「More」(更多) 和「Create file」(建立檔案)。 
- 在「建立新檔案」窗格中,執行下列步驟: - 在「Add a file path」(新增檔案路徑) 欄位中,輸入 - .npmrc。
- 點選「建立檔案」。 
 
在 Dataform 存放區的 .npmrc 檔案中新增驗證權杖
如要在 Dataform 存放區中驗證私人 NPM 套件,該存放區必須已包含含有套件驗證權杖的密鑰和 .npmrc 檔案,您需要在存放區的 .npmrc 檔案中新增私人套件的驗證權杖。
在 .npmrc 檔案中,您需要定義 NPM 登錄檔的範圍,並新增該範圍內存取私人套件的驗證權杖。如要進一步瞭解 .npmrc 檔案,請參閱 npmrc 說明文件。
.npmrc 檔案中的驗證權杖必須與上傳至存放區的密鑰中的驗證權杖相符。
如要在 Dataform 存放區的 .npmrc 檔案中新增驗證權杖,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「Dataform」頁面。 
- 選取要安裝私有 NPM 套件的存放區,然後選取工作區。 
- 在「Files」窗格中,選取 - .npmrc檔案。
- 在 - .npmrc檔案中,以以下格式定義 NPM 登錄範圍和私有套件的驗證權杖:- @REGISTRY-SCOPE:registry=NPM-REGISTRY-URL NPM-REGISTRY-URL:_authToken=$AUTHENTICATION-TOKEN- 更改下列內容: - REGISTRY-SCOPE:要套用驗證權杖的 NPM 登錄範圍。
- NPM-REGISTRY-URL:NPM 登錄檔的網址,例如 https://npm.pkg.github.com。
- AUTHENTICATION-TOKEN:私有 NPM 套件的驗證權杖。.npmrc檔案中的驗證權杖必須與上傳的密鑰中的驗證權杖相符。驗證權杖會以環境變數的形式提供於.npmrc檔案中,因此請務必加入開頭的${和結尾的}括號。
 - 您可以輸入多個驗證權杖。 
以下程式碼範例顯示新增至 Dataform 存放區 .npmrc 檔案的私有 NPM 套件驗證權杖:
@company:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${AUTHENTICATION_TOKEN}
在 Dataform 存放區中驗證後續的私人套件
如要在已包含套件驗證權杖和 .npmrc 檔案的 Dataform 存放區中驗證私人 NPM 套件,請按照下列步驟操作:
- 在 Secret Manager 中列出密碼,然後選取儲存存放區私有 NPM 套件驗證權杖的密碼。 
- 為密鑰新增版本。 - Dataform 預設會使用最新版本的密鑰。 - 以以下格式將私有套件的驗證權杖新增至密鑰值:
 - { "AUTHENTICATION_TOKEN_NAME": "TOKEN_VALUE" }- 更改下列內容: - AUTHENTICATION_TOKEN_NAME:權杖的專屬名稱,用於識別驗證的套件。
- TOKEN_VALUE:驗證權杖的值,可從 NPM 登錄檔取得。
 - 您可以一次新增多個驗證權杖。 
- 在 Dataform 中,將驗證權杖新增至存放區的 - .npmrc檔案。
驗證私人 NPM 套件後,您可以在 Dataform 存放區中安裝套件。
建立套件
本節說明如何建立自訂 JavaScript 套件,以便在 Dataform 中開發工作流程。
如要建立可在多個 Dataform 存放區重複使用的套件,您必須建立專用於套件的 Dataform 存放區,並將其連線至第三方 Git 存放區,以便其他 Dataform 存放區使用。
接著,您需要建立頂層 index.js 檔案,並將可匯出的套件內容 (例如函式和常數) 新增至該檔案。如需在 Dataform 中建立套件的範例,請參閱 GitHub 上的 dataform-package-base。
建立套件後,您可以在其他 Dataform 存放區中安裝套件,並使用套件中可匯出的內容 (例如常數和函式) 開發工作流程。
除了建立套件,您也可以透過 include,在單一 Dataform 存放區中重複使用 JavaScript 函式和常數。詳情請參閱「在 Dataform 中使用 include 重複使用變數和函式」。
如要使用 JavaScript 程式碼建立自己的套件,以便在 Dataform 中重複使用,請在工作區中按照下列步驟操作:
- 在「檔案」窗格中,按一下 「更多」。 
- 點選「建立檔案」。 - 在「建立新檔案」窗格中,執行下列步驟: 
- 在「Add a file path」(新增檔案路徑) 欄位中,輸入 - index.js。
- 點選「建立檔案」。 
 
- 在 - index.js檔案中,輸入要匯出套件的 JavaScript 程式碼。- 請按照下列格式建立常數: - const CONSTANT_NAME = CONSTANT_VALUE; module.exports = { CONSTANT_NAME };- 更改下列內容: - CONSTANT_NAME:常數名稱
- CONSTANT_VALUE:常數的值
 
- 建立函式時請採用下列格式: - function FUNCTION_NAME(PARAMETERS) { FUNCTION_BODY } module.exports = { FUNCTION_NAME }- 更改下列內容: - FUNCTION_NAME:函式名稱。
- PARAMETERS:函式的參數。
- FUNCTION_BODY:您要函式執行的程式碼。
 
 
- 選用:按一下「格式」。 
- 選用:在 - definitions目錄中,新增不會匯出的套件程式碼。
下列套件程式碼範例顯示 postoffice 套件的 index.js 檔案,其中匯出 getDomain 函式:
// filename index.js
// package name postoffice
const GENERIC_DOMAINS = "('samplemail.com','samplemail.co.uk','examplemailbox.com'";
function getDomain(email) {
  let cleanEmail = `trim(${email})`
  const domain = `substr(${cleanEmail}, strpos(${cleanEmail}, '@') + 1)`;
  return `case
            when ${domain} in ${common.GENERIC_DOMAINS} then ${cleanEmail}
            when ${domain} = "othermailbox.com" then "other.com"
            when ${domain} = "mailbox.com" then "mailbox.global"
            when ${domain} = "support.postman.com" then "postman.com"
            else ${domain}
          end`;
}
module.exports = { getDomain }
後續步驟
- 如要瞭解如何管理必要的 Dataform 核心套件,請參閱「管理 Dataform 核心套件」。
- 如要進一步瞭解 Dataform 中的套件,請參閱使用套件在多個存放區中重複使用程式碼。
- 如要瞭解如何編寫可在 Dataform 中重複使用的 JavaScript 變數和函式,請參閱「在 Dataform 中使用 include 重複使用變數和函式」。