reactjs - 如何在项目中获取缩小文件(Gatsby / React)
问题描述
盖茨比版本 = 2.0.0-beta.19
节点版本 = v10.6.0
npm 版本 = 6.1.0
VScode 版本 = 1.25.1
在我的 react Gatsby 项目中添加缩小文件(.min.js 或具有缩小内容的 .js)时,我尝试执行以下操作时收到以下错误gatsby develop
:
错误 10:41:47 AM 编译失败,出现 1 个错误 ./src/components/appinsights.js 中的错误 模块错误(来自 ./node_modules/eslint-loader/index.js): /mnt/d/my_site/src/components/appinsights.js 2:185 错误应为赋值或函数调用,而是看到一个表达式 no-unused-expressions 2:248 警告意外使用逗号运算符无序列 2:493 警告意外使用逗号运算符无序列 2:649 错误应为赋值或函数调用,而是看到一个表达式 no-unused-expressions 2:660 警告意外使用逗号运算符无序列 2:761 警告意外使用逗号运算符无序列 7:1 错误应为赋值或函数调用,但看到一个表达式 no-unused-expressions 7:31 警告意外使用逗号运算符无序列 ✖ 8 个问题(3 个错误,5 个警告)
我添加了一个新文件“./src/components/appinsights.js”,该文件的内容来自 AppInsights JS 片段的脚本标签
var appInsights=window.appInsights||function(a){
function b(a){c[a]=function(){var b=arguments;c.queue.push(function(){c[a].apply(c,b)})}}var c={config:a},d=document,e=window;setTimeout(function(){var b=d.createElement("script");b.src=a.url||"https://az416426.vo.msecnd.net/scripts/a/ai.0.js",d.getElementsByTagName("script")[0].parentNode.appendChild(b)});try{c.cookie=d.cookie}catch(a){}c.queue=[];for(var f=["Event","Exception","Metric","PageView","Trace","Dependency"];f.length;)b("track"+f.pop());if(b("setAuthenticatedUserContext"),b("clearAuthenticatedUserContext"),b("startTrackEvent"),b("stopTrackEvent"),b("startTrackPage"),b("stopTrackPage"),b("flush"),!a.disableExceptionTracking){f="onerror",b("_"+f);var g=e[f];e[f]=function(a,b,d,e,h){var i=g&&g(a,b,d,e,h);return!0!==i&&c["_"+f](a,b,d,e,h),i}}return c
}({
instrumentationKey: "<my_key>"
});
window.appInsights=appInsights,appInsights.queue&&0===appInsights.queue.length&&appInsights.trackPageView();
在我的“./src/components/layout.js”
import appinsightsFile from './appinsights.js'
...
<Helmet
title={data.site.siteMetadata.title}>
<html lang="en" />
<script type="application/ld+json">{appinsightsFile}</script>
</Helmet>
...
我不确定这是反应问题还是盖茨比。我似乎无法获得任何缩小的代码来处理我的应用程序。
我努力了:
- 我的 layout.js 中的内联应用程序洞察代码
- 从头盔代码中取出脚本标签
解决方案
我没有那么有经验,想对此发表评论,但我需要 50 声望。无论如何,也许我们可以一起解决您的问题。
首先,您为什么使用类型application/ld+json
而不是ApplicationInsights-JS自述文件text/javascript
中所述?
要调试此问题,请尝试将 的内容appinsights.js
直接插入脚本标记。
以下应该有效:
<Helmet
title={data.site.siteMetadata.title}>
<html lang="en" />
<script type="text/javascript">
{`SCRIPT`}
</script>
</Helmet>
如果没有,请尝试使用dangerouslySetInnerHTML。
注意里面的倒勾{}
。如果这工作正常,请继续使用您的组件。
据我所知——如果我出错了请纠正我——在 Gatsby 中直接导入文件的用例属于静态文件。您可以简单地import logo from './Logo.svg'
这样做,这会将 URL 返回到该文件。在幕后,Webpack 会将该文件包含在包中,您可以像在src
和href
属性中一样引用它。
如果你想从一个组件中包含那个 JavaScript 字符串(你放在components
目录中的不是一个组件),你应该为此编写一个组件来呈现这个 JavaScript。
我自己没有尝试过,但我认为这可以通过一些修改来工作。
eslint
我认为,您面临的错误是 的一部分。编译器(Webpack?)需要非缩小的 ES6 JavaScript。再次,如果我错了,请纠正我。
某种无状态功能组件应该可以帮助您:
appinsights.js
import React from 'react'
const AppInsights = () => {
return `
SCRIPT
`
}
export default AppInsights
布局.js
import AppInsights from './appinsights.js' // Replace with your path.
<Helmet
title={data.site.siteMetadata.title}>
<html lang="en" />
<script type="text/javascript"><AppInsights /></script>
</Helmet>
但我认为像以前一样工作更安全dangerouslySetInnerHTML
。
推荐阅读
- javascript - Bootstrap nav-link class is not working in Chrome, but works in Firefox, navigates to corresponding section
- node.js - Mongoose userModel 未定义
- c++ - 尝试使用 Assimp GLM 从 MD5 文件加载 OpenGL 中的动画
- adobe - Scene7 URL parameters
- one-to-one - Proving a function isn't 1 to 1
- r - 在 R 中抓取标签链接
- javascript - Javascript:如何在不创建循环依赖项的情况下重用创建子实例的方法
- php - 无法将数据从用户表单发送到 PHP 中的数据库
- javascript - 如何构建我的网站,以便在输入新 URL 时通过 AJAX 加载新内容?
- ruby-on-rails - Rails 5:如何将现有模型的 ID 类型更改为 UUID?