【问题标题】:How to add a vanillaJS npm script to a Nuxt plugin?如何将 vanillaJS npm 脚本添加到 Nuxt 插件?
【发布时间】:2021-07-22 10:17:04
【问题描述】:

我无法让 AWS S3 将图像直接保存到 AWS S3。

我尝试将 AWS 包作为插件导入,但它不起作用。

我的nuxt.config.js确实有以下内容

plugins: [
  ...
  '~plugins/S3.js'
],

在我的plugins/s3.js

import vue from "vue"
import S3 from "aws-s3";
vue.use(S3)

我尝试在我的文件中使用它

const S3Client = new S3(config)
S3Client
.uploadFile(file, this.getRandomName(10))
.then(data => {
    console.log(data)
})
.catch(err => {
    console.log(err)
})

我得到了错误

multiplephotoupload.vue?7624:110 Uncaught (in promise) ReferenceError: S3 is not defined

如果我直接将它写入我的组件中,则它已定义并且可以正常工作

import S3 from "aws-s3";

【问题讨论】:

  • 是的,我说过只有以这种方式导入它才有效,这违背了将其用作插件的目的。
  • 你需要在多个地方全局使用它吗?
  • 只有三个组件

标签: javascript amazon-web-services vue.js amazon-s3 nuxt.js


【解决方案1】:

如果您想将它用作 Nuxt 插件(这将在全球范围内可用,但也会增加应用程序的总包大小和加载时间,即使在您不使用它的地方),您可以在您的s3.js插件

import S3 from 'aws-s3'

export default ({ _ }, inject) => {
  const config = {
    bucketName: 'myBucket',
    dirName: 'photos' /* optional */,
    region: 'eu-west-1',
    accessKeyId: 'ANEIFNENI4324N2NIEXAMPLE',
    secretAccessKey: 'cms21uMxçduyUxYjeg20+DEkgDxe6veFosBT7eUgEXAMPLE',
    s3Url: 'https://my-s3-url.com/' /* optional */,
  }
  inject('s3', new S3(config))
}

您将能够在您的 Vue 组件中使用 this.$s3 访问实例!

这需要使用未公开 Vue 方法的包来完成。文档中的更多信息:https://nuxtjs.org/docs/2.x/directory-structure/plugins#inject-in-root--context


Josh Deltener 有一个 great article 在这个有各种方法的。


如果您想要动态选项,您还可以将参数传递给您的注入值,如链接文档中所示。

【讨论】:

  • 如果您不介意我问,您将如何在 Nuxt 应用程序中使用 AWS S3
  • @OpeyemiOdedeyi 我的后端团队为我提供了一个 GraphQL 查询,它为我提供了一个上传 URL。它很快就会过期并且只能使用一次,我使用 nuxt-dropzone 将文件发送到那里。非常灵活,可以很好地完成工作。但您可以通过多种方式 IMO。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2021-08-04
  • 2023-01-04
  • 2019-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多