小编Ins*_*nno的帖子

如何将 monorepo 中的所有子文件夹 package.json 更新为相同版本?

我有一个包含许多不同前端 React 项目的存储库,它们都有自己的 package.json 文件。

我有四个要求:

  1. 我想让所有这些项目保持在同一个依赖轨道上。(即,我希望我的所有项目都使用每个 npm 包的相同版本)
  2. 我希望能够使用一个“全局”命令将每个 package.json 更新到最新版本。
  3. 理想情况下,我想使用某种经过验证的开源工具,例如 Yarn Workspaces 或 Lerna,而不是使用全局 package.json 文件自行管理这一切。
  4. 我正在使用 Yarn 生态系统。

这些包不需要同时运行。并非每个项目都包含完全相同的依赖项,但所有项目都至少包含一些常见的依赖项(即 React、Webpack、Babel 等)。这些包也是完全私有的,不应在 npm 上发布,而只能在 GitHub 上发布。

我已经对工具进行了一些研究,但我很困惑是否仅使用 Yarn Workspaces 就能解决问题,或者是否有必要使用 Lerna。这是我迄今为止在 Yarn Workspaces 中所做的事情:

文件夹结构:

Repo-root
   Packages
      Project-1
      Project-2
Run Code Online (Sandbox Code Playgroud)

回购根 package.json:

{
   "private": true,
   "name": "example-monorepo",
   "workspaces": ["packages/*"],
   "scripts": {}
}
Run Code Online (Sandbox Code Playgroud)

据我所知,Yarn Workspaces 尝试将所有常见依赖项移至幕后的根 node_modules,但我对如何完成共享依赖项安装和更新到最新版本要求感到困惑。Yarn Workspaces 能否自行满足要求,或者 Lerna 是否需要此功能?在勒纳如何实现这一目标?我是否需要定义一个全局的 package.json“单一事实来源”,或者这些工具是否在幕后自行执行某些版本?Lerna 或 Yarn Workspaces 如何“知道”如何在没有全局版本范围集的情况下将所有单独的 package.json 文件更新到最新版本?(我希望所有项目都相同)

npm lerna yarnpkg yarn-workspaces

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

unicode 日期字段中本地、非本地和 ISO 之间有什么区别?

我正在使用该date-fns库将 javascriptdate对象格式化为特定格式。date-fns使用Unicode 日期字段符号。在此记录符号的中,“本地”(即本地星期几:e)和非本地符号(星期几:E)之间存在区别。还有 ISO 版本(ISO 星期几:)i,以及独立版本。

我知道在格式化完整日期时,我不应该使用独立版本。但我不太清楚本地、非本地和 ISO 之间的区别。

我的问题:假设这是日期:

const date = new Date('2021-04-12')

假设我想打印出Monday, April 12世界各地的信息,无论时区如何,这些有什么区别:

format(date, 'EEEE, MMMM d.')星期几

format(date, 'iiii, MMMM d.')ISO 星期几

format(date, 'eeee, MMMM d.')当地星期几

它们取决于本地用户时间吗?我看到这个问题,这表明我需要使用它getTimezoneOffset()来确保各地的时间一致。但我不确定 Unicode 符号如何影响显示的内容。

javascript unicode date date-fns

8
推荐指数
0
解决办法
317
查看次数

使用svg-url-loader在webpack中加载svg

我在Webpack工作流程中使用SVG遇到很多麻烦。我正在尝试使其与background: url(sample.svg)CSS中的属性一起显示。单独使用它是行不通的,因此我认为我已经使用了装载程序。这是我使用的步骤。

我使用svg-url-loader加载了SVG。

1.svg-url-loader通过npm 安装并将其添加到我的module.exports

 {
        test: /\.svg/,
        use: {
            loader: 'svg-url-loader'
        }
      },
Run Code Online (Sandbox Code Playgroud)

2. 我将其添加到index.js文件的顶部:

require('svg-url-loader!./images/topography.svg');
Run Code Online (Sandbox Code Playgroud)

3.background-image在我的CSS中添加了SVG路径:

body {
  background-image: url("../images/topography.svg");
  background-size: 340px, auto;
  min-height: calc(100vh - 100px);
  margin: 50px;
  background-attachment: fixed;
  letter-spacing: -1px;
}
Run Code Online (Sandbox Code Playgroud)

4. SVG未呈现到页面。当我在浏览器中检查身体时,我发现:

background: url(data:image/svg+xml,module.exports = __webpack_public_path__ + '8dccca4….svg';);
Run Code Online (Sandbox Code Playgroud)

我对data-uri不太了解,所以也许我遇到了这个问题。

另外,我尝试使用不同的SVG文件进行了此操作,但它们均无效。

css svg loader data-uri webpack

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

为什么在componentDidUpdate()中需要带有prevState的prevProps?

我建立了一个简单的计数器应用程序:

class Counter extends React.Component {

  constructor(props) {
    super(props);
    this.handleAddOne = this.handleAddOne.bind(this);
    this.handleMinusOne = this.handleMinusOne.bind(this);
    this.handleReset = this.handleReset.bind(this);
    this.state = {
      count: 0
    };
  }

  componentDidMount() {
      const stringCount = localStorage.getItem('count');
      const count = parseInt(stringCount);

      if (isNaN(count) === false) {
        this.setState(() => ({ count }));
      } 
  }

  componentDidUpdate(prevProps, prevState) {
    if (prevState.count !== this.state.count) {
      localStorage.setItem('count', this.state.count);
      console.log('componentDidUpdate');
    }
  }

  handleAddOne() {
    this.setState((prevState) => {
      return {
        count: prevState.count + 1
      }
    });
  }

  handleMinusOne() {
    console.log('handleMinusOne');
    this.setState((prevState) => { …
Run Code Online (Sandbox Code Playgroud)

reactjs

4
推荐指数
2
解决办法
2102
查看次数

useState() 没有从事件处理程序更新状态?

我正在尝试在 React 中重新创建一个旧的 Flash 游戏。游戏的目标是按下按钮一段时间。

这是旧游戏:http : //www.zefrank.com/everysecond/index.html

这是我的新 React 实现:https : //codesandbox.io/s/github/inspectordanno/every_second

我遇到了问题。当释放鼠标时,我使用 Moment.js 时间库计算按下按钮和释放按钮之间的时间量。如果timeDifference之间onMouseDownonMouseUp事件中targetTime,我希望游戏level,增加和targetTime提高为好。

我正在handleMouseUp事件处理程序中实现这个逻辑。我正在将预期时间打印到屏幕上,但逻辑不起作用。此外,当我console.log()时代时,它们与打印到屏幕上的不同。我相当确定timeHeld并且timeDifference没有正确更新。

最初我认为我做事件处理程序的方式有问题,我需要使用useRef()or useCallback(),但在浏览了其他一些问题后,我不太了解这些问题,无法知道在这种情况下是否必须使用它们。由于我不需要访问以前的状态,所以我认为我不需要使用它们,对吗?

游戏逻辑在这个包装组件中:

import React, { useState } from 'react';
import moment from 'moment';
import Button from './Button';
import Level from './Level';
import TargetTime from './TargetTime';
import TimeIndicator from './TimeIndicator';
import Tries from './Tries';

const TimerApp = () …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks

4
推荐指数
2
解决办法
5237
查看次数

如何从快乐数算法中获得真实的回报?

此算法的目标是取一个数字的每个数字的平方,将它们加在一起,然后继续重复直到1返回数字。我确定算法可以正常工作,但是我不能完全理解return。为什么这不起作用?

const n = 19;

const sumSquare = (n) => {
  const N = n.toString();
  let sum  =  0;
  for (let digit of N) {
      const product = +digit * +digit;
      sum += product;
  }  
  console.log(sum);
  if (sum === 1) {
    return true;
  } else {
    sumSquare(sum);
  }
};

console.log(sumSquare(n));
Run Code Online (Sandbox Code Playgroud)

javascript

0
推荐指数
1
解决办法
58
查看次数