将用于浏览器服务的单个AWS SDK JS与webpack和Typescript集成

时间:2018-04-29 04:45:28

标签: webpack aws-sdk-js

我有一个Vue.js项目,我已经与Typescript和webpack集成了。一切都很棒。我正在添加一个简单的SNS消息服务,因此我集成了AWS SDK。一切似乎都很好,但显然,如果我使用它的一小部分,我不想捆绑整个AWS SDK。我试着遵循所有的建议无济于事。

问题

我希望能够做到以下几点:

import { SNS } from 'aws-sdk/clients/sns';

但是我收到了错误

  

... node_modules / aws-sdk / clients / sns“'没有导出成员'SNS'。

有趣...

import { SNS } from 'aws-sdk'完全正常(但是我留下了5MB +缩小的构建文件,因为它包含了整个sdk)。

我确实有一个解决方法

我可以使用AWS SDK构建器工具,只需下载SNS服务,将该文件添加到我的目录树,然后从该文件导入SNS。这也很好,是我目前最好的解决方法。但现在我被迫在npm之外维护一个文件,这不是很好。

有关我在哪里出错的任何想法吗?

一些可能有用的额外信息

以下是一些可能有用的额外信息。

我的ts.config.json文件看起来像

{
  "compilerOptions": {
    "outDir": "./inc/dist/ts-built/",
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "strict":  true, 
    "target": "es5",
    "module": "es2015",
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "moduleResolution": "node"   
  },
  "include": [
    "./inc/src/**/*"
  ],
  "exclude": [
    "node_modules"    
  ]
}

我的webpack.config.js文件的相关部分目前看起来像是

var path = require("path");
var webpack = require('webpack');

module.exports = {
    //context: path.resolve(__dirname, "./inc/src"),
    resolve: {
        extensions: ['.ts', '.js', '.vue', '.json'],
        alias: {
            'vue$': 'vue/dist/vue.esm.js'
        }
    },
    entry: {
        main: './inc/src/search/main.ts'
    },
    output: {
        publicPath: '/inc/dist',
        path: path.resolve(__dirname, './inc/dist'),
        filename: '[name].build.js'
    },
    module: {
        rules: [
            {
                test: /\.vue$/,
                loader: 'vue-loader',
                }
            },
            {
                test: /\.tsx?$/,
                loader: 'ts-loader',
                exclude: /node_modules/,
                options: {
                    appendTsSuffixTo: [/\.vue$/],
                }
            },
            {
                test: /\.json$/,
                loader: 'json-loader'
            }
        ]
    }
};

0 个答案:

没有答案