vue.js - 如何将第三方脚本代码添加到 Nuxt 中?

我正在尝试将 Segment Analytics 提供的代码片段添加到 nuxt.config.js 中,但出现以下错误:

FATAL $config is not defined

我做错了什么?

nuxt.config.js:

head: {
  script: [
    {
      hid: 'segment-script',
      innerHTML: `
        !function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)...
        analytics.load(${this.$config.segmentApiSecret});
        analytics.page();
        }}();
      `,
      type: 'text/javascript',
      charset: 'utf-8'
    }
  ]
},
privateRuntimeConfig: {
  segmentApiSecret: process.env.SEGMENT_API_SECRET
},

最佳答案

如何加载外部JavaScript脚本

  • 如果您打算导入 .js 文件,我推荐这篇文章:https://vueschool.io/articles/vuejs-tutorials/how-to-load-third-party-scripts-in-nuxt-js/

  • 使用 inject将 NPM 包添加到 Nuxt 的上下文中,这 blog post Alexander 进一步解释了这一点

  • Josh Deltener 有一个 great article关于如何正确导入它(使用各种方法!)

  • 您也可以使用 this solution在你的 nuxt.config.js 文件中(它并不像你在 github issues of Nuxt 中看到的那么糟糕)

head: {
  __dangerouslyDisableSanitizers: ['script'],
  script: [
    {
      hid: 'gtm-script1',
      src: 'https://www.googletagmanager.com/gtag/js?id=UA-111111111-1',
      defer: true
    },
    {
      hid: 'gtm-script2',
      innerHTML: `
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag('js', new Date());

        gtag('config', 'UA-111111111-1');
      `,
      type: 'text/javascript',
      charset: 'utf-8'
    }
  ]
},
  • 否则,您也可以将其添加到项目根目录下的 app.html
<html {{ HTML_ATTRS }}>
   <head>
    {{ HEAD }} 
  </head>
  <body {{ BODY_ATTRS }}>
    {{ APP }}

    <!--EXTRA JS FILES-->
  </body>
</html>

对初始答案的回答

如果你在nuxt.config.js文件中添加它,你需要直接使用process.env.SEGMENT_API_SECRET

将它添加到某些中间件或默认布局中可能是一个好主意,而不是将一些 HTML 直接扔到配置文件中。

此外,如果您打算在客户端中公开它,则将它添加到 privateRuntimeConfig 是没有意义的。 privateRuntimeConfig used for server operations在构建应用程序时(在 Node.js 端)。在您的情况下,Segment 将完全公开,因此,您应该可以公开您的公共(public) API key (仍然仔细检查)。


编辑:其他你也可以使用官方的Nuxt或 Vue用于此目的的插件。

https://stackoverflow.com/questions/67534304/

相关文章:

javascript - 有什么办法可以缩短这段代码吗?

java - 如果读取字节数为 0,是否有任何理由继续读取 InputStream?

python - 如何减少 PyQt5 QGridLayout 中两个小部件之间的空间?

python - 检查是否存在与列表中的字符串匹配的子字符串

python - 无法使用 pytesseract.image_to_string 从图像中读取文本

python - 为什么我没有从使用编码数据库中得到 SQL 查询的结果?

r - 为什么 geom_smooth 不绘图? (唯一值不足错误)

docker - Jenkins SSH 管道步骤 - 需要一个终端来读取密码

sql - 如何计算运行平均值

clojure - 如何在 clojure 中生成随机字母数字字符串?