小编Dan*_*Dan的帖子

当 ignore-scripts 设置为 true 时,npm 的行为有何不同?

我刚看了一个谈话,其中发言者建议在运行:

npm config set ignore-scripts true

这样包的安装后脚本和安装前脚本就不会运行。这样,您就可以避免恶意程序包中的病毒。

我的问题是:运行此命令后,我是否必须对 npm install 软件包执行不同的操作并使它们在项目中工作?

如果在使用 npm 时运行此命令不会带来额外的不便,那么运行它不会有任何缺点。它只会帮助您避免病毒。

如果是这种情况,为什么这不是默认设置?

我问是因为我假设通过忽略包脚本,npm 包的行为会有所不同,人们将不得不手动做更多的事情。

node.js npm npm-scripts

24
推荐指数
2
解决办法
6438
查看次数

使用 Typescript 初始化 DataLoader 时出现类型错误

我正在尝试使用以下代码初始化 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。

typescript graphql dataloader

5
推荐指数
1
解决办法
2535
查看次数

为什么 Go 对于长度为 100k 的切片使用的内存比长度为 100k 的数组要少?

考虑下面的代码,我分配了 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一旦当前函数超出范围, 的值就会全部清除。
  • 因此,第一个片段直接在堆上分配 4k 数组。
  • 并且,第二个片段在堆上分配 4k 切片标头。每个片头都有一个指向大小为 100k 的唯一数组(也在堆上)的指针。
  • 在这两种情况下,大小为 100k 的堆上都有 4k 数组。因此,在任何一种情况下都应该使用大致相等的内存量。

我读到: https: //go.dev/blog/slices-intro。但找不到解释这一点的实现细节。

arrays heap-memory go stack-memory

4
推荐指数
1
解决办法
128
查看次数