在 nuxt 中导入 vue 包的正确方法是什么?

What is the right way to import vue package in nuxt?

我尝试将 this 包导入到我的 nuxt 项目中。 可以找到我所有的编码实验 here。我会参考不同的分支。

有几种方法可以这样做:

  1. 只需在 here (master 分支之类的页面中直接导入即可)

这种方式效果很好。您可以通过主页上的按钮进入上传页面。

直到您手动刷新页面

然后你会得到这个错误SyntaxError Cannot use import statement outside a module

当您尝试构建它时会发生同样的错误。

  1. 通过 plugins (like in plugin-use 分支导入它,在构建中有或没有供应商选项)

我遇到了同样的错误。

  1. 通过带有一些 options (like in plugin-options 分支的插件导入它)

然后包仅在您刷新页面时加载,并且仅在开发模式下加载。

如果您将转到主页上的那个按钮(之前引用过)- 将出现一个空白页面。

  1. 通过模块导入它(就像在 modules 分支中)。

然后nuxt根本无法加载,出现这个错误SyntaxError: Invalid or unexpected token

您能否评论一下每种方法以及为什么它不起作用? 如何正确导入?

作为插件使用。

  1. 在插件文件夹中,创建一个名为vue-upload-multiple-image.js

    的文件
    //vue-upload-multiple-image.js
    
    import Vue from 'vue'
    import {VueUploadMultiple} from 'vue-upload-multiple-image'
    Vue.use(VueUploadMultiple)
    
  2. 将其列在 nuxt.config.js

    的插件块下
    //nuxt.config.js
    
    plugins: [ 
          { src: '~plugins/vue-upload-multiple-image', ssr: false }
    ]
    

因此您将能够在项目的任何组件上使用该包

最终答案如下(我查过使用这个包的项目)

Nuxt 上有一个 project 运行。

这些是您应该添加到@tamzid-oronno 的答案中的更改

//vue-upload-multiple-image.js

import Vue from 'vue'
import VueLazyload from 'vue-lazyload'
import VueUploadMultipleImage from 'vue-upload-multiple-image'

Vue.use(VueLazyload) // this is from the package installation guide
Vue.component('VueUploadMultipleImage', VueUploadMultipleImage)

并以同样的方式在插件中列出。

//nuxt.config.js
plugins: [ 
      { src: '~plugins/vue-upload-multiple-image', ssr: false }
]

这样您就可以使用该包而无需将其作为标签导入到页面中。这是在 plugin_plus_lazy 分支中实现的。

两个标签都可以工作 vue-upload-multiple-image 和 VueUploadMultipleImage。

//your-index-file.vue
<template>
  <div id="my-strictly-unique-vue-upload-multiple-image" style="display: flex; justify-content: center;">
    <vue-upload-multiple-image
      @upload-success="uploadImageSuccess"
      @before-remove="beforeRemove"
      @edit-image="editImage"
      :data-images="images"
      idUpload="myIdUpload"
      editUpload="myIdEdit"
      dragText = "Drag an image here"
      browseText = "(or click here to browse)"
      primaryText = "Default Image"
      markIsPrimaryText = "Set as default image"
      popupText = "This image will be set as default"
      dropText = "Drag and drop"
      accept = image/jpeg,image/png,image/jpg,image/tif,image/tiff
    ></vue-upload-multiple-image>
  </div>
</template>

<script>

export default {
  name: "AppUpload",
  data(){
    return{
      file:"",
      images: []
    }
  },
  methods:{

    uploadImageSuccess(formData, index, fileList) {    },
    beforeRemove (index, done, fileList) {    },
    editImage (formData, index, fileList) {   },
  }
}
</script>

<style scoped>

</style>

要创建静态版本并在本地机器上测试它,请执行以下操作:

$ npm run generate
# test the project
$ npm install http-server
$ cd dist
$ http-server -p 3000

我还有一个问题 - 为什么它有效? :)