我想在我的Angular项目中使用Chart.js.在以前的Angular2版本中,我使用'chart.loader.ts'做得很好,它有:
export const { Chart } = require('chart.js');
Run Code Online (Sandbox Code Playgroud)
然后在组件代码中我就是
import { Chart } from './chart.loader';
Run Code Online (Sandbox Code Playgroud)
但升级到cli 1.0.0和Angular 4之后,我收到错误:"找不到名称'require'".
要重现错误:
ng new newapp
cd newapp
npm install chart.js --save
echo "export const { Chart } = require('chart.js');" >> src/app/chart.loader.ts
ng serve
Run Code Online (Sandbox Code Playgroud)
在我的'tsconfig.json'中,我有
"typeRoots": [
"node_modules/@types"
],
Run Code Online (Sandbox Code Playgroud)
在'node_modules/@types/node/index.d.ts'中有:
declare var require: NodeRequire;
Run Code Online (Sandbox Code Playgroud)
所以我很困惑.
顺便说一句,我经常遇到警告:
[tslint] The selector of the component "OverviewComponent" should have prefix "app"(component-selector)
Run Code Online (Sandbox Code Playgroud)
虽然我在'.angular-cli.json'中设置了"前缀":"".可能是因为从'angular-cli.json'改为'.angular-cli.json'的原因?
我希望在我的Angular2应用程序上的某个地方有一个时间戳或内部版本号,这样我就可以判断用户是否使用旧的缓存版本.
如何在AOT编译/构建时使用Angular2中的AngularCLI执行此操作?
更新到 Webpack 5 后,我收到此错误:
不应从默认导出模块导入命名导出“版本”(作为“版本”导入)(很快将仅提供默认导出)
超级简单的代码示例:
import { version } from '../package.json';
export const appVersion = version;
Run Code Online (Sandbox Code Playgroud)
这个问题给出了 的解决方案import * as packageInfo from '../../package.json'; version: packageInfo.version,,但这导入了所有 的解决方案package.json,正如答案注释上的一些评论一样,这可能被视为安全风险。
我所需要的只是版本号;如果我必须导入整个内容package.json并可能将其公开给我的用户,那么最好引入代码重复并仅创建和维护两个单独的变量:
package.json然而,我猜测有一种安全的导入方式,package.json不会让 Webpack 5 抱怨,但我只是不知道。有这样的办法吗?
在我的 Angular 应用程序中,我想显示 package.json 文件中的版本。
我知道要导入它,我需要允许导入 json,并且对于这个 tsconfig.json 文件需要获得一些额外的行:
{
"compilerOptions": {
"module": "commonjs",
"resolveJsonModule": true,
"esModuleInterop": true,
"moduleResolution": "node"
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做了,但之后当我在组件类中导入 json 文件时:
import { myPackage } from '../../../package.json';
Run Code Online (Sandbox Code Playgroud)
我仍然收到错误:
找不到模块“../../../package.json”。考虑使用“--resolveJsonModule”导入带有“.json”扩展名的模块.ts(2732)
问题不在于路径,因为我将另一个简单的 json 文件放入同一文件夹,但出现相同的错误。
我在谷歌上搜索并看到了很多关于“--resolveJsonModule”的例子,但似乎我做了所有需要的事情......但它仍然不起作用。
我还重新启动了 VScode 和 Angular 服务 - 它没有帮助。
我使用 Angular 10.0.11 和 TS 3.9.7
请指教!谢谢!
我无法包含package.json角度库中的版本,但它可以在项目中使用。我这样使用导入:
import { version } from '../../package.json';
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
ERROR: error TS6059: File '/Users/.../library/package.json' is not under 'rootDir' '/Users/.../library/src'. 'rootDir' is expected to contain all source files.
An unhandled exception occurred: error TS6059: File '/Users/.../library/package.json' is not under 'rootDir' '/Users/.../library/src'. 'rootDir' is expected to contain all source files.
See "/private/var/folders/tw/z8v0wkt50g5876740n99hzy00000gp/T/ng-0JDpjC/angular-errors.log" for further details.
Run Code Online (Sandbox Code Playgroud)
该途径包括产生安全风险的require整体。仅包含版本号,但适用于角度应用程序而不是库。package.jsonimport { version } from '../../package.json'