我刚看了一个谈话,其中发言者建议在运行:
npm config set ignore-scripts true
这样包的安装后脚本和安装前脚本就不会运行。这样,您就可以避免恶意程序包中的病毒。
我的问题是:运行此命令后,我是否必须对 npm install 软件包执行不同的操作并使它们在项目中工作?
如果在使用 npm 时运行此命令不会带来额外的不便,那么运行它不会有任何缺点。它只会帮助您避免病毒。
如果是这种情况,为什么这不是默认设置?
我问是因为我假设通过忽略包脚本,npm 包的行为会有所不同,人们将不得不手动做更多的事情。
我正在尝试使用以下代码初始化 DataLoader 的实例:
const authorLoader = new DataLoader(async (keys:string[]) => {
// Return an author for each book
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Argument of type '(keys: string[]) => Promise<Author[]>' is not assignable to parameter of type 'BatchLoadFn<string, Author>'.
Types of parameters 'keys' and 'keys' are incompatible.
The type 'readonly string[]' is 'readonly' and cannot be assigned to the mutable type 'string[]'
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误以及如何修复它?我阅读了Generics数据加载器的源代码,但尚未找到解决方案。
注意:keys是 类型string[],而不是number[]因为我使用的是uuid's。
考虑下面的代码,我分配了 4000 个数组,每个数组的长度为 100k:
parentMap := make(map[int][100_000]int)
for i := 0; i < 4000; i++ {
parentMap[i] = [100_000]int{}
time.Sleep(3 * time.Millisecond)
}
Run Code Online (Sandbox Code Playgroud)
如果我在本地运行它并分析其内存使用情况,它开始使用 >2GB 的内存。
现在,如果我们稍微更改一下代码以使用数组切片(但长度也为 100k),如下所示:
parentMap := make(map[int][]int)
for i := 0; i < 4000; i++ {
parentMap[i] = make([]int, 100_000)
time.Sleep(3 * time.Millisecond)
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,内存峰值约为 73MB。为什么是这样?
我认为这两个片段将使用大致相同的内存,原因如下:
parentMap在这两种情况下,Go 运行时都会在堆上分配 的值。Go 这样做是因为如果它在堆栈上分配这些值,那么parentMap一旦当前函数超出范围, 的值就会全部清除。我读到: https: //go.dev/blog/slices-intro。但找不到解释这一点的实现细节。
arrays ×1
dataloader ×1
go ×1
graphql ×1
heap-memory ×1
node.js ×1
npm ×1
npm-scripts ×1
stack-memory ×1
typescript ×1