如何使用 webpack import aws-sdk

How to use webpack import aws-sdk

我在官方找到这个issues,但是貌似他们拒绝回答。 所以只能问SO上的问题了。 这是我的错误和警告日志:

WARNING in ./~/aws-sdk/lib/util.js
Critical dependencies:
40:30-45 the request of a dependency is an expression
43:11-53 the request of a dependency is an expression
 @ ./~/aws-sdk/lib/util.js 40:30-45 43:11-53

WARNING in ./~/aws-sdk/lib ^\.\/.*$
Module not found: Error: Cannot resolve directory '.' in /Users/me/Documents/Sources/my-project/client/node_modules/aws-sdk/lib
 @ ./~/aws-sdk/lib ^\.\/.*$

WARNING in ./~/aws-sdk/lib/api_loader.js
Critical dependencies:
13:15-59 the request of a dependency is an expression
104:12-46 the request of a dependency is an expression
108:21-58 the request of a dependency is an expression
114:18-52 the request of a dependency is an expression
 @ ./~/aws-sdk/lib/api_loader.js 13:15-59 104:12-46 108:21-58 114:18-52

WARNING in ./~/aws-sdk/lib/region_config.json
Module parse failed: /Users/me/Documents/Sources/my-project/client/node_modules/aws-sdk/lib/region_config.json Line 2: Unexpected token :
You may need an appropriate loader to handle this file type.
| {
|   "rules": {
|     "*/*": {
|       "endpoint": "{service}.{region}.amazonaws.com"
 @ ./~/aws-sdk/lib ^\.\/.*$

ERROR in ./~/aws-sdk/lib/api_loader.js
Module not found: Error: Cannot resolve module 'fs' in /Users/me/Documents/Sources/my-project/client/node_modules/aws-sdk/lib
 @ ./~/aws-sdk/lib/api_loader.js 1:9-22

ERROR in ./~/aws-sdk/lib/services.js
Module not found: Error: Cannot resolve module 'fs' in /Users/me/Documents/Sources/my-project/client/node_modules/aws-sdk/lib
 @ ./~/aws-sdk/lib/services.js 1:9-22

一共有三种:

  1. 无法解析模块 'fs'

我只需要安装fs就可以解决

  1. 需要合适的加载程序

嗯,这个需要安装json-loader,在webpack.config.js里设置,也可以解决。

  1. 关键依赖项
  2. 未找到模块:错误:无法解析目录“.”

我是webpack newbie.So,不知道怎么解决。 有人会帮助我吗?谢谢。

更新:

  1. 未找到模块:错误:无法解析目录“.”

那是我的错,配置文件的扩展名缺少 .

更新(2015-10-20):

aws-sdk 解决这个问题。我可以从 npm 使用它。

谢谢 aws-sdk 团队。

配置:

module: {
  noParse: [
   /aws/
  ]
}

用法:

window.AWS 到全局 AWS 对象的引用。

我发现 this blog post 为我修复了它。

基本上你需要导入库的构建版本。

所有功劳归于作者。这是代码:

require('aws-sdk/dist/aws-sdk');
var AWS = window.AWS;

ES6 版本:

import 'aws-sdk/dist/aws-sdk';
const AWS = window.AWS;

如果您正在创建节点包,则使用 noParse 方法应该可行,因为这会将 webpack 设置为不应用任何 parsing/loaders。在创建 umd 格式的输出 file/library.

时,这对我不起作用

要创建一个 umd 格式的库,我必须使用加载程序来浏览 aws-sdk 并处理 json 文件。

安装加载器:

npm install json-loader --save-dev

npm install transform-loader brfs --save-dev

Webpack 配置:

module: {
  loaders: [
    { test: /aws-sdk/, loaders: ["transform?brfs"]},
    { test: /\.json$/, loaders: ['json']},
  ]
},
output: {
  library: 'LibraryName',
  libraryTarget: 'umd'
},
resolve: {
  extensions: ['', '.js']
}

LibraryName 替换为您自己的命名空间。目前该库将通过构造函数使用,如下所示:

var libObj = new LibraryName();

AWS SDK 从版本 2.6.1 开始添加了对 webpack 的支持,请参阅 Using webpack and the AWS SDK for JavaScript to Create and Bundle an Application – Part 1 博客 post 描述如何将 aws-sdk 引入 webpack捆绑。

使用 npm install json-loader --save-dev 将以下代码添加到 webpack.config.js

  module: {
loaders: [{
  test: /\.js$/,
  loaders: ['babel'],

  exclude: /node_modules/,
},
{
      test: /.json$/,
      loaders: ['json']
    }]

}

只需将 * 作为 AWS 从 'aws-sdk'

导入

请注意,我们指定了一个加载器来告诉 webpack 如何处理导入 JSON 文件,在本例中是使用我们之前安装的 json-loader。默认情况下,webpack 仅支持 JavaScript,但也使用加载器来添加对导入其他文件类型的支持。 AWS SDK 大量使用 JSON 文件,因此如果没有这个额外的配置,webpack 在生成包时会抛出错误。