小编Har*_*mer的帖子

安装后 NPX 将二进制文件存储在哪里?

如果我npx一次性运行二进制文件,它将输出以下内容:

npx my-module 

/// npx: installed 1 in 1.34s
/// Hello, from my module!
Run Code Online (Sandbox Code Playgroud)

这些二进制文件默认存储在哪里?执行后是否npx保存二进制文件,a-lanpm或者只是运行它们然后删除文件?

据我了解,在下载模块之前,npx将首先查看本地node_modules/.bin目录,然后查看目录。/usr/local/bin但我检查了这两个位置,但没有看到新模块......

node.js npm npx

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

使用 React Hooks 更新带滚动

我试图根据个人是否在组件上向下滚动来控制 React 组件的可见性。可见性Fade作为“in”属性传递到元素中。

我已经使用 UseEffect Hook 设置了一个侦听器,它添加了 onMount 侦听器。实际的 onScroll 函数应该更新 scrollTop 状态(它是到页面顶部的高度的当前值),然后是滚动状态(将事件的滚动到页面顶部与之前的状态进行比较,以及如果第一个大于第二个,则返回 true)。

但是,由于某种原因 setScrollTop 钩子不起作用,滚动状态继续保持在 0。

我究竟做错了什么?这是完整的组件:

export const Header = (props) => {

  const classes = useStyles();

  const [scrolling, setScrolling] = useState(false);
  const [scrollTop, setScrollTop] = useState(0);

  const onScroll = (e) => {
    setScrollTop(e.target.documentElement.scrollTop);
    setScrolling(e.target.documentElement.scrollTop > scrollTop);
  }

  useEffect(() => {
    window.addEventListener('scroll', onScroll);
  },[]);

  useEffect(() => {
    console.log(scrollTop);
  }, [scrollTop])

  return (
   <Fade in={!scrolling}>
      <AppBar className={classes.header} position="fixed">

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

javascript reactjs react-hooks

21
推荐指数
2
解决办法
3万
查看次数

D3 .merge功能

尽管经过无数次读取D3 API,我仍在努力理解D3中的合并功能.

API说:"此方法通常用于在数据连接后合并输入和更新选择.单独修改输入和更新元素后,您可以合并这两个选项并在两者上执行操作而无需重复代码."

这是一个在力导向图表中直截了当地使用它的例子,其中每个勾号都会调用勾选的函数:

var simulation = d3.forceSimulation(nodes)
    .force("charge", chargeForce)
    .force("center", centerForce)
    .on("tick", ticked);

    function ticked() {

    var u = d3.select("svg").selectAll("circle").data(nodes)

    u.enter().append("circle").attr("r",5)
        .merge(u) // What is the merge function doing here?
        .attr("cx", d => d.x)
        .attr("cy", d => d.y)

    u.exit().remove() // Why is it necessary to remove excess objects w/ the exit selection?

    }
Run Code Online (Sandbox Code Playgroud)

我理解数据绑定是如何工作的,以及enter()和exit()选择是如何工作的.但是,我以前从未使用过"合并",我不明白它在这里做什么.如果有人可以一步一步地简要介绍这个功能中发生的事情,那将非常有用.我相信其他人也有类似的问题.

javascript data-visualization d3.js

12
推荐指数
2
解决办法
7886
查看次数

Node.js Spawn与执行

在观看我学习Node的在线培训视频中,讲述者说:“对于包含大量数据的较长流程而言,生成更好,而对于短数据则执行效果更好。”

为什么是这样?Node.js中child_process生成和执行函数之间有什么区别,我何时知道要使用哪个?

javascript function spawn node.js

11
推荐指数
3
解决办法
3905
查看次数

Puppeteer 在返回 HTML 之前不触发点击

我的 Node.js puppeteer 脚本成功地填写了一个表单,但在返回修改后的页面内容之前,页面有时只接受元素上的“单击”事件。这是脚本:

const fetchContracts = async (url) => {
    const browser = await pupeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']});
    const page = await browser.newPage();
    const pendingXHR = new PendingXHR(page);


    await page.goto(url, { waitUntil: 'networkidle2' });
    await Promise.all([
        page.click("#agree_statement"),
        page.waitForNavigation()
    ]);

    await page.click(".form-check-input");

    await Promise.all([
        page.click(".btn-primary"),
        page.waitForNavigation()
    ]);    

    /// MY PROBLEM OCCURS HERE
    /// Sometimes these clicks do not register....
    await page.click('#filedReports th:nth-child(5)')
    await pendingXHR.waitForAllXhrFinished();
    await page.click('#filedReports th:nth-child(5)');
    await pendingXHR.waitForAllXhrFinished();

    /// And my bot skips directly here.... …
Run Code Online (Sandbox Code Playgroud)

javascript events xmlhttprequest node.js puppeteer

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

我可以打开多个 Puppeteer 浏览器吗?

我正在使用node-cron(它允许您在节点程序中运行 cron 脚本)来运行一些 puppeteer 抓取。脚本有时会同时运行,这意味着将同时const browser = await puppeteer.launch()打开多个浏览器实例。

这是不好的做法吗?如果是这样,是否有另一种编写此代码的方法不会使其失败?

谢谢你的帮助。

cron.schedule('*/15 * * * *', async () => {    
    const browser = await pupeteer.launch({ headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox']});
    const page = await browser.newPage(); // Create new instance of puppet
    let today = moment();        
    logger.info(`Chrome Launched...`);

    try {
        await senatorBot(users, page, today.format("YYYY-DD-MM"));
    } catch(err) {
        logger.debug(JSON.stringify(err));
    }

    try {
        await senateCandidateBot(users, page, today.format("YYYY-DD-MM")); // This sequence matters, because agree statement will not be present...
    } …
Run Code Online (Sandbox Code Playgroud)

javascript memory node.js web-scraping puppeteer

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

如何在 VIM 片段中将这个单词大写?

编辑 \xe2\x80\x94 这对于 coc-snippets是不可能的。Ultisnips 可以实现这一点。

\n

我有以下用于 React 的 vim 片段(带有 coc-snippets):

\n
snippet STATE_HOOK "useState hook" b\nconst [${1:state}, set${1:`!v expand(\'%:t:r\')`}] = useState($2)\nendsnippet\n
Run Code Online (Sandbox Code Playgroud)\n

这可用于快速创建以下(不正确的)代码:

\n
const [color, setcolor] = useState("green");\n
Run Code Online (Sandbox Code Playgroud)\n

问题是setcolor需要采用驼峰式,如下所示:setColor

\n

如何编写此代码片段以使扩展输入大写?

\n

javascript vim code-snippets ultisnips vscode-snippets

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

打字稿在 MacOS 上被错误识别为 MPEG 文件

编辑:仍然没有找到答案。这是 plist 文件,它显示操作系统正在将.ts文件作为 MPEG 视频文件而不是文本文件读取:

编辑#2:我尝试在关闭 SIP 的情况下重新启动计算机,但仍然无法编辑 plist 文件。

在此处输入图片说明

我正在使用许多快速查看应用程序从 Mac finder 中查看文件内部。到目前为止,这一直工作得很好,我已经能够添加我经常使用的几乎所有文本文件类型......除了 Typescript。

我已经尝试过这种方法,但它不起作用,因为我的系统仍然将.ts文件视为视频文件。

.ts文件的扩展名被解读为某种类型的MPEG-2视频文件。这不是一个文件类型,我真的曾经预期使用或工作。有没有办法手动覆盖计算机内置的.ts文件类型,以便将其作为 javascript 而不是视频文件进行选择?

您可以在此处看到 Apple 正在将该.ts文件识别为视频文件:

在此处输入图片说明

我深入到编辑文件扩展名的兔子洞中,发现系统将文件扩展名映射到它们的类型,.plist在你的 System 文件夹中的一个文件中/System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist,我认为我可以编辑那个文件。但事实证明,在 Big Sur 上,系统卷是只读的。我确信编辑这个文件会起作用(我可以看到我必须删除什么扩展名)但我不确定这是最好的方法。

有人有更好的方法让 Mac 将打字稿文件识别为文本/javascript 文件吗?

permissions macos plist typescript

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

D3单击事件处理程序

我目前正在学习D3,并且有一个与交互性有关的问题。

以下示例根据单击的按钮调整屏幕上一组圆圈的大小。它有效(我正在学习教程)。本质上,来自CSV文件的键名绑定到每个按钮,单击这些键时,会将键名中继到附加函数(在此示例中为buttonClick),该函数用于访问每个对象中该键/值对的值。我的数据。然后,使用d3.max()函数计算最大值,该最大值用于确定新的比例并相应地重画圆。

我的问题是:函数buttonClick如何知道接受绑定到每个按钮的“数据”属性作为参数?在onclick事件处理程序中调用该函数时,为什么没有括号?

感谢您的任何帮助,您可以提供。

function createSoccerViz() {

d3.csv("worldcup.csv", data => {overallTeamViz(data)

});

function overallTeamViz(incomingData) {   
d3.select("svg")
.append("g")
.attr("id","teamsG")
.attr("transform", "translate(50,300)")
.selectAll("g").data(incomingData).enter()
.append("g")
.attr("class", "overallG")
.attr("transform", (d,i) => "translate(" + i * 60 + "," + 0 +")");
var teamG = d3.selectAll("g.overallG")
teamG.append("circle")
.attr("r",20)
teamG.append("text")
.text(d => d.team)
.attr("y", 30)

dataKeys = Object.keys(incomingData[0])
.filter(d => d !== "team" && d !== "region")

d3.select("#controls").selectAll("button.teams")
.data(dataKeys).enter()
.append("button")
.html(d => d)
.on("click", buttonClick) ////// Why no parentheses here?


function buttonClick(datapoint) {
var maxValue = …
Run Code Online (Sandbox Code Playgroud)

javascript event-handling d3.js

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

Vue 2.7 与组合 API + Vuex

我们正在尝试将 Vue 2 应用程序迁移到 Vue 2.7,但在组合 API 和 Vuex 方面遇到了一些问题。

在我们当前的应用程序中,我们使用@vue/composition-api包来让我们使用可组合项。在这些可组合项中,我们需要访问商店,并像这样获取它:

...rest of the component
setup(props, { parent }) {
  const store = parent.$store
  someComposable({ store })
}
Run Code Online (Sandbox Code Playgroud)

但是,当我们将 Vue 版本升级到 2.7 时,不再支持此语法。我们需要使用useStoreVuex 的可组合项来访问商店。这仅适用于 Vuex 版本 4。

在当前版本的 Vue 上升级 Vuex 版本 4 时,我们看到以下错误:

 WARNING in ./node_modules/vuex/dist/vuex.esm-bundler.js 14:9-15
 export 'inject' (imported as 'inject') was not found in 'vue' (possible exports: default)
  @ ./src/plugins/vuex.js 4:0-24 5:8-12
  @ ./src/app.js 11:0-24

 WARNING in ./node_modules/vuex/dist/vuex.esm-bundler.js 132:14-25
 export 'effectScope' (imported as …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vuex vuejs2

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