盖茨比使用自定义 javascript

Gatsby use custom javascript

所以我想在我的 Gatsby 项目中使用这些脚本:

<script src="https://cdn.jsdelivr.net/gh/manucaralmo/GlowCookies@3.1.1/src/glowCookies.min.js"></script>
<script>
  glowCookies.start('en', { 
      style: 1,
      analytics: 'G-FH87DE17XF', 
      facebookPixel: '990955817632355',
      policyLink: 'https://link-to-your-policy.com'
  });
</script>

(来自 https://github.com/manucaralmo/GlowCookies

我尝试将它与 react-helmet 一起使用:

<Helmet>
  <script src="https://cdn.jsdelivr.net/gh/manucaralmo/GlowCookies@3.1.1/src/glowCookies.min.js"></script>
  <script>
      glowCookies.start('en', { 
          style: 1,
          analytics: 'G-FH87DE17XF', 
          facebookPixel: '990955817632355',
          policyLink: 'https://link-to-your-policy.com'
      });
  </script>
</Helmet>

但是我收到这个错误:

  41:17  error  Parsing error: C:\(...)\layout.js:     
Unexpected token, expected "}" (41:17)

  39 |     <script>
  40 |         glowCookies.start('en', {
> 41 |             style: 1,
     |                  ^
  42 |             analytics: 'G-FH87DE17XF',
  43 |             facebookPixel: '990955817632355',
  44 |             policyLink: 'https://link-to-your-policy.com'

所以只添加第一个脚本标签就可以了,但不能创建它的实例。

这样包装:

<Helmet>
  <script src="https://cdn.jsdelivr.net/gh/manucaralmo/GlowCookies@3.1.1/src/glowCookies.min.js"/>
  <script>
    {`glowCookies.start('en', {
      style: 1,
      analytics: 'G-FH87DE17XF',
      facebookPixel: '990955817632355',
      policyLink: 'https://link-to-your-policy.com'
    })`}
  </script>
</Helmet>

将它用作模板文字就可以了。

这可能不是实现自定义 javascript 的最佳方式,但这是最适合我的方式。所以不需要 react-helmet,只需使用 Gatsbys 内置函数:

盖茨比-ssr.js

export const onRenderBody = ({ setPostBodyComponents }) => {
  setPostBodyComponents([
    <script
      key="https://cdn.jsdelivr.net/gh/manucaralmo/GlowCookies@3.1.1/src/glowCookies.min.js"
      src="https://cdn.jsdelivr.net/gh/manucaralmo/GlowCookies@3.1.1/src/glowCookies.min.js"
      defer
    />,
    <script key="glowCookies.min.js" src="/js/glowCookies.js" defer />,
  ])
}

/static/js/glowCookies.js

glowCookies.start('en', {
   style: 1,
   analytics: 'G-FH87DE17XF',
   facebookPixel: '990955817632355',
   policyLink: 'https://link-to-your-policy.com'
})