小编Nor*_*mal的帖子

如何同时支持es模块和commonjs模块

我们从 npm 安装的一些包同时支持 commonjs 和 es 模块,

这些包可以按如下方式导入:

import express from 'express'
// or
const express = require('express')
Run Code Online (Sandbox Code Playgroud)

我创建了一个包,已使用 es 模块将其发布到 npm

因为我正在开发的另一个项目是用 commonjs 构建的,所以我意识到我不能使用以下语法来要求它:

const stackPlayer = require('stack-player')
Run Code Online (Sandbox Code Playgroud)

我怎样才能支持我的包stack-player中的两个模块系统,以便世界各地的每个人都可以使用它?

  • 除了将我的所有项目转换为 es 模块之外,还有其他方法吗(这太复杂了,因为该项目已有 1 年历史,而且足够大,无法拒绝这个想法)。?

javascript node.js

18
推荐指数
2
解决办法
1万
查看次数

如何在 TypeScript 和 Node.js 中启用 Object.groupBy()

我在 Node.js v18.17.1 和 TypeScript v5 上运行。

我听说了新的 JavaScript 方法Object.groupBy()

const inventory = [
  { name: "asparagus", type: "vegetables", quantity: 5 },
  { name: "bananas", type: "fruit", quantity: 0 },
  { name: "goat", type: "meat", quantity: 23 },
  { name: "cherries", type: "fruit", quantity: 5 },
  { name: "fish", type: "meat", quantity: 22 },
];

const result = Object.groupBy(inventory, ({ type }) => type);
console.log(result)
Run Code Online (Sandbox Code Playgroud)

当我编写代码时Object.groupBy(),出现以下 TypeScript 错误:

Property 'groupBy' does not exist on type 'ObjectConstructor'.ts(2339) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typescript

6
推荐指数
1
解决办法
1900
查看次数

即使 set-cookie 标头存在,Axios 也不会创建 cookie?

前端:[axios]

  const formSubmit = async (e) => {
    e.preventDefault()
    const formData = new FormData(e.target)
    const email = formData.get('email')
    const password = formData.get('password')
    try {
      const res = await axios.post('http://172.16.2.19:3001/api/v1/auth/login', {
        email,
        password,
      })
      console.log(res.data) // its okay, I can login if email & password are correct.
    } catch (error) {
      console.log(error)
    }
  }
Run Code Online (Sandbox Code Playgroud)

后端 [Nodejs ExpressJs]:

App.js 内部:

const cors = require('cors')
app.use(cors({ credentials: true }))
Run Code Online (Sandbox Code Playgroud)

在 Login.js 内部(/auth/login 端点):

// ... code, then... if email & password are correct: …
Run Code Online (Sandbox Code Playgroud)

javascript cookies express axios

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

如何在 React Router v6 中正确获取当前路径名?

我正在使用一个名为Material-UI 的库来构建我的应用程序布局。<ListItemButton>我在我的应用程序的侧导航中使用它的组件。现在。该组件<ListItemButton>不是链接,而是按钮。但它有一些样式,你可以在这里看到它的样子,点我。这个组件接受一个componentprop,这个componentprop 的作用是它基本上允许你在它内部渲染一些东西,例如,我可以给它<div/>,我可以给它<a/>我可以给它<b/>等等,但我也可以给它一个 React成分。这就是我在这里所做的。我给它 React 路由器<NavLink>组件。

\n

现在。这很简单,只要给它<NavLink>组件,它就会工作。但是,不幸的是,它不允许您写<NavLink><NavLink>,您必须将其写为NavLink不带括号,因此,我无法向它传递任何参数。

\n

幸运的是,这个 Material-UI 的工作方式是,当它在其组件之一中看到一个 prop(例如<ListItemButton>它不理解的组件)时,它会自动将该 prop 传递给子组件。因此,在我们的例子中,如果我们编写了一个不在<ListItemButton>文档中的 prop,它会将其传递给NavLink组件。

\n

因此,我们可以传递该to道具。如下:

\n
<ListItemButton to="/users" component={NavLink}>\n
Run Code Online (Sandbox Code Playgroud)\n

到目前为止,一切都很好。我们要做的最后一件事是确保只要搜索栏中的链接与 NavLink指定的路径匹配,ListItemButton 组件就会突出显示。

\n

好消息是,它<ListItemButton>有一个预定义的道具,可以使其在屏幕上看起来像所选的那样,因此它突出显示的颜色有点暗。这个 prop 称为selectedprop,它接受一个布尔值(truefalse)。所以:

\n

我们应该怎么做?我们可以通过比较搜索栏中的 URL 是否与我们在 …

javascript reactjs react-router

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

如何在 MUI 数据网格中仅隐藏一列的选项菜单?

我正在使用 MUI x(社区版本),我想隐藏特定列的选项菜单,而不是所有列。我仍然希望其他人显示此菜单,但仅对于此列,我想隐藏它。如何?

disableColumnMenu对所有列禁用它。

// const columns = [ ... etc, then eventually
{ field: 'actionMenu', headerName: strings.actions, sortable: false, filterable: false },
// ]
Run Code Online (Sandbox Code Playgroud)
<DataGrid
  disableSelectionOnClick
  rows={rows}
  columns={columns}
  density="compact"
  loading={isLoading}
  components={{ Toolbar: GridToolbar }}
  localeText={{
    noRowsLabel: strings.noModerators,
  }}
/>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

reactjs material-ui

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

如果我想向 Function 对象添加通用命名的属性,我是否应该担心与未来可能发生的 ECMAScript 更改发生冲突?

我正在尝试创建一个可以通过以下方式调用的函数:

log() 
log.error()
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我们可以通过在函数本身上编写来创建这样一个函数:

log() 
log.error()
Run Code Online (Sandbox Code Playgroud)

不建议这样写函数吗?因为 JavaScript 将来可能会发布一个可能包含“错误”属性的更新,所以我的“错误”属性将覆盖该 JavaScript 功能。


下面是一个示例,说明人们可能会在何处使用此模式以及它为何有用。

例如,Jquery:

function log(){

}
log.error = () => {}
Run Code Online (Sandbox Code Playgroud)

$( "#button-container button" ).on( "click", function( event ) {} )
Run Code Online (Sandbox Code Playgroud)

您在许多流行的图书馆中都会看到这种模式。

$一个对象,

它是可调用的,所以你可以调用它$('css query selector here') ,它是可链接的,所以你可以调用它的其他方法$().on(),并且它有方法$.ajax()

javascript

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

如何使用字符串访问对象的嵌套属性?

我有以下字符串:

const str = "prop1.prop2.prop3"
Run Code Online (Sandbox Code Playgroud)

我想使用这个字符串来访问以下对象的属性 prop3:

const obj = {
   prop1: {
      prop2:{
         prop3:{
            // ---- destination point
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么做?一定有什么东西不断地添加obj[currentProp]等等。还有..没有更快的方法吗?我担心我把时间浪费在更容易实现的事情上

javascript

2
推荐指数
1
解决办法
2467
查看次数

如何在 JSDOC 中扩展 typedef 参数?

我有一个 typedef 的 JSDoc 注释,如下所示,

/**
 * @typedef {Object} obj1
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */
Run Code Online (Sandbox Code Playgroud)

我想要一个新的 typedef,其中还包含以下属性:

* @property {boolean} c - Property 3
* @property {boolean} d - Property 4
Run Code Online (Sandbox Code Playgroud)

除了ab之外,如何向对象添加任何其他属性?

在代码中,它是这样的:

/**
 * @typedef {Object} obj1
 * @property {boolean} a - Property 1
 * @property {boolean} b - Property 2
 */
Run Code Online (Sandbox Code Playgroud)

正如你所看到的, ab是共享的,所以我不想重复定义它们,它们是完全相同的。

如何向现有定义添加属性?

在代码中,我们可以这样做:

* @property {boolean} c - Property 3 …
Run Code Online (Sandbox Code Playgroud)

javascript jsdoc typescript visual-studio-code

2
推荐指数
1
解决办法
870
查看次数