【问题标题】:Get conic-gradient polyfill to work with Vue获取 conic-gradient polyfill 以与 Vue 一起使用
【发布时间】:2018-10-11 11:49:13
【问题描述】:

我正在尝试在我的 Vue.js 项目中实现 this Polyfill

<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<script src="conic-gradient.js"></script>

我正在使用带有单个文件组件和 webpack 的 Vue-CLI 实例化的 Vue。

描述看起来很简单,包括两个脚本标签,然后就可以了。

我已将 conic-gradient NPM 包添加到我的项目 (yarn add conic-gradient) 中,它同时获取 conic-gradient 脚本以及所需的 prefixfree。

然后我继续尝试在我的 main.js 中进行干式导入:

import 'conic-gradient'

还有

import conic-gradient from 'conic-gradient'

然后调用:

Vue.use(conic-gradient

我也尝试过在我的组件 (dome.vue) 中进行干式导入

然而,似乎没有任何东西可以渲染圆锥渐变。我究竟做错了什么?

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component polyfills


    【解决方案1】:

    Conic-Gradient 不是一个 Vue 插件,所以你不能只用它来做Vue.use。 既不是 ES6 模块(抱歉通知晚了)所以你不能使用import ConicGradient...,作者发布了一个失败的 npm 包。

    既然你说你的项目是用Vue-CLI生成的,那你一定要找到src/main.js文件,把你的import ConicGradient from 'conic-gradient'放在最上面。

    然后你就可以开始使用它了

    import ConicGradient from 'conic-gradient'
    
    new Vue({
        data: {
            gradient: new ConicGradient({
                stops: 'gold 40%, #f06 0',
                repeating: true,
                size: 400
           });
        }
    
    })
    

    转到您的 index.html 并将其粘贴到您的正文结束标记 &lt;/body&gt; 之前(下载该文件并提供本地副本)

    &lt;script src="https://cdn.rawgit.com/LeaVerou/conic-gradient/609dc5f4/conic-gradient.js"&gt;&lt;/script&gt;

    现在你可以在你的 Vue 组件中使用new window.ConicGradient({ ... })

    一个工作的 sn-p

    Vue.config.productionTip = Vue.config.devtools = false
    
    new Vue({
      el: '#app',
      data: {
        gradient: new window.ConicGradient({
          stops: 'red, yellow, lime, aqua, blue, magenta, red',
          size: 100
        })
      }
    })
    <script src="https://cdn.rawgit.com/LeaVerou/conic-gradient/609dc5f4/conic-gradient.js"></script>
    <script src="https://unpkg.com/vue@2.5.16"></script>
    
    <div id="app">
      <img :src="gradient.png" style="border-radius: 50%" />
    </div>

    【讨论】:

    • 所以我需要在 main.js 以及我使用的每个组件中进行导入?我不想用我在整个应用程序中使用的不同渐变来淹没我的 main.js 文件。
    • 你只需在需要使用的组件中导入即可。如果您不是在main.js 文件中使用它,而是在另一个组件中使用它,那么不要将它导入main.js 文件中。虽然你会发现自己在各种组件中“导入”它,但这里由 webpack 负责,代码不会“重复”。它被多次导入,但只加载一次。这就是 ES6 模块的工作原理!
    • 如果我这样做:从 'conic-gradient' 导入 ConicGradient 0' }) } } } 我收到 [Vue 警告] 错误:数据()中的错误:“TypeError:__WEBPACK_IMPORTED_MODULE_0_conic_gradient___default.a 不是构造函数”
    • 我的错,我没有意识到这个包还没有准备好 es6。它在 npm 注册表中发布,但您不能像 es6 模块一样导入它。我刚刚用另一种方法编辑了我的答案
    • 发生这种情况是因为元素是在库注入我相信的“css polyfil”之后安装的。您还需要知道您在 cli 生成的项目中使用 webpack。所以你最好为 css 寻找一个 webpack 解决方案。
    猜你喜欢
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2018-08-21
    • 2019-08-13
    • 2019-08-04
    • 2021-08-04
    • 2020-06-27
    相关资源
    最近更新 更多