小编Nic*_*ick的帖子

清除 CORS 的浏览器缓存

我需要清除 Chrome 中一个文件的缓存。

\n

我正在设置从我自己的 CDN 加载字体,并添加cache-control: public, max-age=31536000, immutable标题。但是,我没有正确设置 CORS,因此出现 CORS 错误。现在,CORS 错误已修复,但由于缓存控制标头,Chrome 仍在服务旧请求。

\n

注意:我只需要清除一次缓存。我希望字体将来是不可变的。

\n

我尝试过的事情

\n
    \n
  • 从设置中清除最近的浏览器缓存
  • \n
  • 在 Devtools > 网络中,选择“禁用缓存”
  • \n
  • 在 Devtools > 网络中,右键单击网络请求并选择“从缓存中清除”
  • \n
  • 使用 \xe2\x8c\x98\xe2\x87\xa7R 硬重新加载(在 Mac 上)
  • \n
  • 长按左上角的刷新按钮,选择“清空缓存并硬重新加载”(/sf/answers/490062961/
  • \n
\n

我可以确认 CORS 错误有两个原因:

\n
    \n
  • 现在可以在 Safari 中使用(之前不能使用)
  • \n
  • 运行curl -IL -X\'GET\' -H\'Origin: http://localhost:3000\' https:example.com/file返回正确的 CORS 标头
  • \n
\n

相关文章

\n

caching google-chrome browser-cache cache-invalidation google-chrome-devtools

16
推荐指数
0
解决办法
5369
查看次数

pnpm -- 同步依赖项的版本

假设我对 Javascript monorepo 有以下限制

\n
-- module a\n   package.json\n-- module b\n   package.json\npackage.json\n
Run Code Online (Sandbox Code Playgroud)\n

模块 A 和模块 B 都依赖于 lodash。

\n

使用pnpm,有什么方法可以确保它们都使用相同版本的lodash?就像在根目录中安装 lodash 并说“使用工作空间根目录中的任何版本”一样?

\n

PS 我知道 pnpm 允许 或 工作区,但根据我的理解(这可能是错误的),只有当依赖项已经是 monorepo \xe2\x80\x94 中的模块而不是第 3 方依赖项时才使用它。

\n

monorepo pnpm

9
推荐指数
1
解决办法
4046
查看次数

粘性标题输入在输入时滚动

我有一个带有搜索输入的粘性标题。为确保锚标记 ( <a href='#section'>) 不会隐藏标题顶部后面的内容,我添加了以下 CSS。

html {
    scroll-padding-top: 48px
}
Run Code Online (Sandbox Code Playgroud)

但是,如果粘性标题包含输入,则当用户输入输入时整个页面将滚动。

有没有办法保留当前的滚动填充行为并防止在使用输入时自动滚动?最好只使用 HTML 和 CSS。

html {
  scroll-padding-top: 48px;
}

body {
  margin: 0;
}

header {
  position: sticky;
  top: 0;
  background: #eeeeee;
  padding: 8px 16px;
}

main {
  padding: 8px 16px;
}

main article,
main div {
  padding: 32px 0;
  border-bottom: 1px solid lightgray;
}

main div {
  background: #ddddff;
}
Run Code Online (Sandbox Code Playgroud)
<html>

<body>
  <header>
    <input type='text' placeholder='type here, page scrolls' />
  </header>
  <main>
    <article>
      <p><a href='#anchor-point'>click me …
Run Code Online (Sandbox Code Playgroud)

html css

8
推荐指数
1
解决办法
489
查看次数

无法将带有 ACL 公共读取的文件上传到 Digital Ocean 空间

我正在尝试从浏览器将图像上传到数字海洋空间。这些图像应该是公开的。我能够成功上传图像。

然而,虽然ACL设置为public-read,但上传的文件始终是私有的

我知道它们是私有的,因为 a) 仪表板显示权限是“私有”,b) 因为公共 URL 不起作用,c) 在仪表板中手动将权限更改为“公共”可以修复所有问题。

这是我正在使用的总体流程。

  1. 在后端创建预签名 URL
  2. 将该 url 发送到浏览器
  3. 将图像上传到该预签名 URL

有什么想法为什么这些图像不公开吗?

代码

以下示例以 TypeScript 编写并使用 AWS 的 v3 SDK。

后端

这会生成用于上传文件的预签名 URL。

import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3'
import { getSignedUrl } from '@aws-sdk/s3-request-presigner'

const client = new S3Client({
    region: 'nyc3',
    endpoint: 'https://nyc3.digitaloceanspaces.com',
    credentials: {
        accessKeyId: process.env.DIGITAL_OCEAN_SPACES_KEY,
        secretAccessKey: process.env.DIGITAL_OCEAN_SPACES_SECRET,
    },
})

const command = new PutObjectCommand({
    ACL: 'public-read',
    Bucket: 'bucket-name',
    Key: fileName,
    ContentType: mime,
})

const url = await …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 digital-ocean aws-sdk digital-ocean-spaces

7
推荐指数
1
解决办法
3483
查看次数

使用 Sveltekit 和 Tailwind CSS

Sveltekit 终于公开测试版了。有谁知道如何将它与 Tailwind CSS 一起使用?这种集成没有任何官方文档。

svelte tailwind-css svelte-3 sveltekit

6
推荐指数
2
解决办法
1685
查看次数

语法错误:不能在模块外使用 import 语句(来自依赖项)

当依赖项未声明为模块时,如何从依赖项中解决“不能在模块外使用导入语句”?


我想用验证在斯维尔特/套件来验证电子邮件。但是,在导入 ESM 版本时,出现“无法在模块外使用导入语句”错误。我使用的是 pnpm 而不是 npm 或 yarn。

import isEmail from 'validator/es/lib/isEmail'
Run Code Online (Sandbox Code Playgroud)
/node_modules/.pnpm/validator@13.6.0/node_modules/validator/es/lib/isEmail.js:1
import assertString from './util/assertString';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at Object.compileFunction (node:vm:355:18)
    at wrapSafe (node:internal/modules/cjs/loader:1039:15)
    at Module._compile (node:internal/modules/cjs/loader:1073:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
    at Module.load (node:internal/modules/cjs/loader:989:32)
    at Function.Module._load (node:internal/modules/cjs/loader:829:14)
    at Module.require (node:internal/modules/cjs/loader:1013:19)
    at require (node:internal/modules/cjs/helpers:93:18)
    at nodeRequire 
Run Code Online (Sandbox Code Playgroud)

似乎验证器正在尝试使用 import 语句,但它的 package.json 没有指定"type": "module". 我的猜测是这是错误的根本原因。

调试步骤

  • package.json 有 "type": "module"
  • 升级到最新版本的节点
  • 尝试使用非 esm 版本的 validator 'validator/lib/isEmail',但这会导致与此线程无关的其他错误。

有关的

javascript node.js node-modules package.json npm-package

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

用 Rust 编写综合单元测试

假设我有一个名为add添加两个数字的 Rust 函数。我想编写一套全面的单元测试以确保它始终有效。

\n

据我所知,有两种方法可以编写测试。

\n
    \n
  1. assert_eq!在一个测试函数中多次使用
  2. \n
  3. 为每组输入/输出创建许多不同的函数\xe2\x80\x94one
  4. \n
\n

这些都不理想(见下文)。还有另一种更好的方法来用 Rust 编写单元测试吗?

\n

使用多个断言

\n
#[test]\nfn test() {\n  assert_eq!(add(1, 2), 3);\n  assert_eq!(add(2, 4), 5);\n  assert_eq!(add(2, 3), 5);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当一切都过去后,这很有效。但如果一个断言失败了,你就不知道是哪一个断言失败了。例如,在上面的测试中,您获得的唯一帮助是“左:6,右:5”。哪个断言导致了这个?这很容易分辨,因为add这是微不足道的,但对于任何非微不足道的事情,你都一无所知。

\n

使用多种功能

\n
#[test]\nfn add_1_and_2() {\n  assert_eq!(add(1, 2), 3);\n}\n\n#[test]\nfn add_2_and_4() {\n  assert_eq!(add(2, 4), 6);\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这解决了使用多个断言的所有问题。然而,测试变得非常冗长,您需要为每个测试创建一个唯一的函数名称。想象一个具有 4-5 个不同参数的函数,并且您正在测试所有组合。有很多难以命名的函数!但至少你会知道哪个断言是错误的。

\n

JavaScript 等效项

\n

理想情况下,我正在寻找一个与使用 Jest 进行 JavaScript 测试具有相同功能的解决方案。

\n
const tests = [[1, 2, 3], [2, 4, 6]];\n\nit.each(tests)("adding %s and %s gives %s", …
Run Code Online (Sandbox Code Playgroud)

testing unit-testing rust

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

Date-fns—如果是当前年份,则省略年份

使用date-fns 的 format 函数,如果是当前年份,是否可以省略年份?是否有一些格式字符串可以启用此功能?

import { format } from 'date-fns'

const date = new Date('July 4, 2021')

// current year is 2021

format(date, 'format string')
// should output "July 4"

format(date, 'format string')
// should output "July 4, 2020"
Run Code Online (Sandbox Code Playgroud)

如果除了 之外还有另一个 date-fns 函数可以执行此操作format,那也可以。我假设任何此类解决方案都可能会使用该format函数,因为这是格式化日期。

替代解决方案

我知道目前可以使用if语句手动执行此操作。

const date = new Date('July 4, 2021')
if (date.getFullYear() === (new Date()).getFullYear()) {
    format(date, 'MMM d')
} else {
    format(date, 'MMM d, YYY')
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我更好奇是否有一种方法可以使用 date-fns 对其进行本机格式化。

javascript date

5
推荐指数
0
解决办法
3630
查看次数

NextJS API 路由在收到数据之前返回?

我不确定这里发生了什么事。我在 NextJS 中设置了一个 API 路由,该路由在数据加载之前返回。有人可以指出这里有任何错误吗?

我有一个调用 makeRequest() 中的数据的函数:

export async function getVendors() {
  const vendors = await makeRequest(`Vendor.json`);
  console.log({ vendors });
  return vendors;
}
Run Code Online (Sandbox Code Playgroud)

然后路由:/api/vendors.js

export default async (req, res) => {
  const response = await getVendors();
  return res.json(response);
};
Run Code Online (Sandbox Code Playgroud)

这是 makeRequest 函数:

const makeRequest = async (url) => {
  // Get Auth Header
  const axiosConfig = await getHeader();

  // Intercept Rate Limited API Errors & Retry
  api.interceptors.response.use(
    function (response) {
      return response;
    },
    async function (error) {
      await new …
Run Code Online (Sandbox Code Playgroud)

event-loop settimeout async-await es6-promise next.js

3
推荐指数
1
解决办法
9248
查看次数

为测试输出创建临时只读缓冲区

我想创建一个 Neovim 插件,每当保存文件时自动运行测试套件。概述如下:

  1. 如果我保存 Rust 文件,请运行cargo test
  2. 如果没有为测试输出打开缓冲区,则自动创建缓冲区
  3. 将该缓冲区标记为只读
  4. 如果我保存另一个文件,请重用现有缓冲区
  5. 如果缓冲区退出(例如:q),则在下一次测试运行时创建一个新缓冲区

然而,我目前面临三个问题:

  1. 当我退出缓冲区时我无法检测到
  2. 当测试输出长于缓冲区高度时,缓冲区不会向下滚动
  3. 当我想退出 Neovim 时,它要求我保存所有这些临时缓冲区(我不想这样做)

我该如何解决这些问题?作为参考,这是我的代码:

local buffer_number = -1

local function log(_, data)
    if data then
        vim.api.nvim_buf_set_lines(buffer_number, -1, -1, true, data)
    end
end

local function open_buffer()
    if buffer_number == -1 then
        vim.api.nvim_command('botright vnew')
        buffer_number = vim.api.nvim_get_current_buf()
    end
end

local function autotest(pattern, command)
    vim.api.nvim_create_autocmd("BufWritePost", {
        group = vim.api.nvim_create_augroup("autotest", { clear = true }),
        pattern = pattern,
        callback = function()
            open_buffer()
            vim.api.nvim_buf_set_lines(buffer_number, 0, -1, true, {}) …
Run Code Online (Sandbox Code Playgroud)

neovim

3
推荐指数
1
解决办法
936
查看次数