

 適用於 JavaScript 的 AWS SDK v2 已end-of-support。我們建議您遷移至 [適用於 JavaScript 的 AWS SDK v3](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/)。如需如何遷移的其他詳細資訊和資訊，請參閱此[公告](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Webpack 綁定應用程式
<a name="webpack"></a>

瀏覽器指令碼或 Node.js 中的 Web 應用程式會使用程式碼模組來建立依存項目。這些程式碼模組可能會擁有自己的依存項目，成為一組您的應用程式運作所需的互連模組。若要管理依存項目，則可使用 webpack 等模組綁定程式。

webpack 模組綁定程式會剖析應用程式的程式碼，進而搜尋 `import` 或 `require` 陳述式以建立配套，其中包含應用程式需要的所有資產。如此一來，即可透過網頁輕鬆提供資產。適用於 JavaScript 的 SDK 可以包含在 webpack 中，做為要包含在輸出套件中的其中一個相依性。

如需 webpack 的詳細資訊，請參閱 GitHub 上的 [webpack 模組綁定程式](https://webpack.github.io/)。

## 安裝 Webpack
<a name="webpack-installing"></a>

您必須先安裝 npm (Node.js 套件管理工具)，才能安裝 webpack 模組綁定程式。若要安裝 webpack CLI 與 JavaScript 模組，請輸入下列命令。

```
npm install webpack
```

您可能也需要安裝允許載入 JSON 檔案的 webpack 外掛程式。輸入下列命令，即可安裝 JSON 載入器外掛程式。

```
npm install json-loader
```

## 設定 Webpack
<a name="webpack-configuring"></a>

根據預設，webpack 會在專案的根目錄中搜尋名為 `webpack.config.js` 的 JavaScript 檔案；此檔案能夠指定組態選項。以下是 `webpack.config.js` 組態檔案的範例。

```
// Import path for resolving file paths
var path = require('path');
module.exports = {
  // Specify the entry point for our app.
  entry: [
    path.join(__dirname, 'browser.js')
  ],
  // Specify the output file containing our bundled code
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  module: {
    /**
      * Tell webpack how to load 'json' files. 
      * When webpack encounters a 'require()' statement
      * where a 'json' file is being imported, it will use
      * the json-loader.  
      */
    loaders: [
      {
        test: /\.json$/, 
        loaders: ['json']
      }
    ]
  }
}
```

本範例會將 `browser.js` 指定為進入點。*進入點*指的是 webpack 用來開始搜尋匯入模組的檔案。系統會指定輸出檔案名稱為 `bundle.js`，這個輸出檔案將包含應用程式需要執行的所有 JavaScript。如果進入點中指定的程式碼匯入或需要其他模組，例如適用於 JavaScript 的 SDK，則該程式碼會綁定，而不需要在組態中指定。

在先前安裝的 `json-loader` 外掛程式中，組態可用來指定 webpack 匯入 JSON 檔案的方式。webpack 依預設僅支援 JavaScript，但其會使用載入器來新增支援匯入其他檔案類型。由於適用於 JavaScript 的 SDK 廣泛使用 JSON 檔案，如果`json-loader`未包含 ，Webpack 會在產生套件時擲出錯誤。

## 執行 Webpack
<a name="webpack-running"></a>

若要使用 webpack 建置應用程式，請將以下內容新增至 `package.json` 檔案中的 `scripts` 物件。

```
"build": "webpack"
```

此處 `package.json` 範例會示範新增 webpack。

```
{
  "name": "aws-webpack",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "aws-sdk": "^2.6.1"
  },
  "devDependencies": {
    "json-loader": "^0.5.4",
    "webpack": "^1.13.2"
  }
}
```

請輸入下列命令以建置應用程式。

```
npm run build
```

接著，webpack 模組綁定程式會在專案的根目錄中產生您所指定的 JavaScript 檔案。

## 使用 Webpack 配套
<a name="webpack-using-bundle"></a>

若要在瀏覽器指令碼中使用配套，您可以使用 `<script>` 標籤來採納該配套，如下方範例所示。

```
<!DOCTYPE html>
<html>
    <head>
        <title>AWS SDK with webpack</title>
    </head> 
    <body>
        <div id="list"></div>
        <script src="bundle.js"></script>
    </body>
</html>
```

## 匯入個別服務
<a name="webpack-importing-services"></a>

webpack 的其中一個優點，就是其可剖析程式碼中的依存項目，且只會綁定應用程式所需的程式碼。如果您使用適用於 JavaScript 的 SDK，則僅綁定應用程式實際使用的 SDK 部分可以大幅減少 Webpack 輸出的大小。

請考慮下列用來建立 Amazon S3 服務物件的程式碼範例。

```
// Import the AWS SDK
var AWS = require('aws-sdk');

// Set credentials and Region
// This can also be done directly on the service client
AWS.config.update({region: 'us-west-1', credentials: {{{YOUR_CREDENTIALS}}}});

var s3 = new AWS.S3({apiVersion: '2006-03-01'});
```

`require()` 函數會指定整個軟體開發套件。使用此程式碼產生的 Webpack 套件會包含完整的 SDK，但當僅使用 Amazon S3 用戶端類別時，則不需要完整的 SDK。如果只包含 Amazon S3 服務所需的開發套件部分，則套件的大小會明顯較小。即使設定組態也不需要完整的 SDK，因為您可以在 Amazon S3 服務物件上設定組態資料。

以下是只包含 SDK 的 Amazon S3 部分時，相同程式碼的外觀。

```
// Import the Amazon S3 service client
var S3 = require('aws-sdk/clients/s3');
 
// Set credentials and Region
var s3 = new S3({
    apiVersion: '2006-03-01',
    region: 'us-west-1', 
    credentials: {{{YOUR_CREDENTIALS}}}
  });
```

## 綁定 Node.js
<a name="webpack-nodejs-bundles"></a>

您能夠在組態中將 Node.js 指定為目標，藉此使用 webpack 產生要在其中執行的配套。

```
target: "node"
```

當您在磁碟空間有限的環境中執行 Node.js 應用程式時，這個做法十分實用。下方為 `webpack.config.js` 組態範例，而該組態會將 Node.js 指定為輸出目標。

```
// Import path for resolving file paths
var path = require('path');
module.exports = {
  // Specify the entry point for our app
  entry: [
    path.join(__dirname, 'node.js')
  ],
  // Specify the output file containing our bundled code
  output: {
    path: __dirname,
    filename: 'bundle.js'
  },
  // Let webpack know to generate a Node.js bundle
  target: "node",
  module: {
    /**
      * Tell webpack how to load JSON files.
      * When webpack encounters a 'require()' statement
      * where a JSON file is being imported, it will use
      * the json-loader
      */
    loaders: [
      {
        test: /\.json$/, 
        loaders: ['json']
      }
    ]
  }
}
```