我刚刚通过npm将您的amCharts4版本下载到我的节点.js应用程序中以进行测试。Wenn 已安装我在 MyNodejsApp/node_modules/@amcharts/amcharts4 中找到了文件琐事.js和图表.js:
MyNodejsApp
_node_modules
|_@amcharts
|_amcharts4
|_charts.js
|_core.js
|_amcharts4-geodata
_public
|_css
|_styles.css
|_js
|_main.js
_routes
|_index.js
_views
|_partials
|_scripts.ejs
|_dashboard.ejs
|_index.ejs
app.js
在我的路由/索引中.js我集成了必要的文件:
const { am4core } = require("@amcharts/amcharts4/core");
const { am4charts } = require("@amcharts/amcharts4/charts");
/home/MyNodejsApp/node_modules/@amcharts/amcharts4/core.js:8
export { System, system } from "./.internal/core/System";
^^^^^^
SyntaxError: Unexpected token export
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:617:28)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (/home/MyNodejsApp/routes/index.js:12:21)
[nodemon] app crashed - waiting for file changes before starting...
我错过了什么?
https://www.amcharts.com/docs/v4/getting-started/basics/
编辑:导入也给了我一个错误
import * as am4core from "@amcharts/amcharts4/core";
import * as am4charts from "@amcharts/amcharts4/charts";
/home/MyNodejsApp/routes/index.js:12
import * as am4core from "@amcharts/amcharts4/core";
^^^^^^
SyntaxError: Unexpected token import
我正在使用节点.js v8.12.0
我不知道是否有办法让amCharts v4适用于node.js。它是为浏览器设计的,而不是节点.js。
在 Web 使用 ES6 的文档中,我们提到捆绑器是一项硬性要求:
目前无法直接在浏览器中加载 npm 包。您必须使用像 Webpack 或 Rollup 这样的捆绑器。(查看我们的使用网络包文章(
网络包
(如果您有兴趣,我在下面提供了一些解释,说明为什么需要捆绑器。
如果您遵循我们的指南,您应该能够通过npm install
让您的代码在浏览器上运行,或者之后通过npm run prepare
再次构建。(在package.json中,您可能需要将"webpack-cli"
设置为最新版本,例如"webpack-cli": "^3.1.2"
.(
但是,这不适用于 node.js,因为window
和document
等浏览器中的全局变量在节点环境中不存在。
对捆绑器的需求
- 我们使用 ES6 导入 (esm(,但在某种程度上只有捆绑商才能解释。
- 即使您尝试使用
<script type="module" src="/js/main.js"></script>
并从那里import
ed,它最终也会出错,因为我们使用的是只有捆绑者才能理解的模块说明符。 例如,没有扩展名的文件的路径("./js/main"
而不是"./js/main.js"
(,或node_modules
中的包名称("@amcharts/amcharts4/core"
而不是"./node_modules/@amcharts/amcharts/core.js"
(,即没有一个是可以fetch
编辑的有效URL。 - 说到捆绑器,即使您使用了 unpkg.com,一旦遇到我们的少数动态导入,它也会出错,因为它不支持动态导入。
- 节点 8.5.0+ 具有对 esm 的实验性支持。您可以在此处阅读更多相关信息。但这行不通,因为它首先还需要
.mjs
(也称为迈克尔杰克逊脚本(扩展!即使没有,或者如果您将所有 amCharts.js
文件重命名为.mjs
,您仍然必须具有有效的模块说明符。假设你重命名了所有的东西,使它们有效,包括其他 npm 包依赖项,并将文件重命名为 .mjs,那么它将破坏使用 npm 下载和管理 amcharts 包的版本控制的意义。
所以是的,无论环境如何,都必须使用捆绑器。
最后恐怕它仍然不能在节点中使用.js但是。假设一旦您有一个捆绑器为您将所有内容放在一起,并且在浏览器中效果很好......要在 Node 中运行内容.js您仍然需要模拟浏览器。有一个名为jsdom的库,它在大多数情况下可以做到这一点。甚至有几个 npm 包在节点全局范围内提供 jsdom,因此像window
和document
这样的变量可以随时随地使用。
amCharts v4 通过 JavaScript 与 SVG 一起工作,因此对 SVG 相关 API 的支持是绝对必要的。SVGSVGElement的实现在jsdom中几乎不存在(或者更好的是,它仍然是一个WIP(。
我们真的需要更多地了解您要做什么,如果通过节点.js应用程序,您真的是这个意思,或者这毕竟是面向浏览器的。如果您需要amCharts在node.js中工作,则目前可能不适合您。让我们知道,我们将尽我们所能提供帮助。