小编Ewa*_*ren的帖子

在 Dockerized Node.js 开发环境中处理 node_modules 的干净且实用的方法?

我最近一直在尝试 dockerize(用于开发和稍后用于生产)一个 MERN 堆栈应用程序,Node.js(更特别是 node_modules)和 Docker 之间的交互让我有点失望。在整个问题中,我将用于开发的计算机指定为“主机”。

TL; 博士

在开发时,有没有一种方法可以在不将主机的 node_modules 文件夹安装到容器的情况下对 Node.js 应用程序进行 Dockerize 化?

我尝试的方法(以及为什么它们都不满足我)

我可以想到使用 Docker(及其 docker-compose 实用程序)进行开发的 3 大优势(我将其称为第 1、2 和 3 点):

  1. 它可以轻松地在新机器上设置开发环境,或在项目中集成新成员,因为除了 Docker 本身之外,您无需手动安装任何东西。
  2. 该应用程序在开发时很容易运行以进行调试(只需快速运行,docker-compose up数据库、后端和前端都已启动并运行)。
  3. 运行时环境在所有机器和应用程序的最终生产环境中都是一致的,因为 Docker 容器有点像它自己的小型 Linux 虚拟机。

前 2 点在 dockerizing 一个 Node.js 应用程序时没有问题;但是我觉得第三个在开发环境中更难实现,因为依赖项在 Node 中的工作方式及其 node_modules 功能。让我解释 :

这是我简化的项目文件夹结构:

project
?   docker-compose.yml
?
????node-backend
?   ?   Dockerfile
?   ?   package.json
?   ?   server.js
?   ?
?   ????src
?   ?   ?   ...
?   ?
?   ????node_modules …
Run Code Online (Sandbox Code Playgroud)

node.js node-modules docker docker-compose

11
推荐指数
1
解决办法
1083
查看次数

从 __init__.py 重新导出模块的正确方法

我有一个包含多个模块的插件包,每个模块定义一个类(每个类都是一个插件)。

我的包结构如下所示:

plugins
? __init__.py
? first_plugin.py
? second_plugin.py
? third_plugin.py
Run Code Online (Sandbox Code Playgroud)

插件文件通常是这样的,只包含一个类定义(必要时还有一些导入):

plugins
? __init__.py
? first_plugin.py
? second_plugin.py
? third_plugin.py
Run Code Online (Sandbox Code Playgroud)

我希望最终用户能够像这样导入插件:

# in first_plugin.py

class MyFirstPlugin:
    ...
Run Code Online (Sandbox Code Playgroud)

而不是必须同时输入模块名称(这是当前需要做的):

from plugins import FirstPlugin
Run Code Online (Sandbox Code Playgroud)

有没有办法通过直接在 __init__.py 文件中重新导出模块的类来实现这一点,不必像这样逐个模块地导入所有内容(当有很多模块时会变得很麻烦):

from plugins.first_plugin import FirstPlugin
Run Code Online (Sandbox Code Playgroud)

python python-import python-3.x

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

何时以及为何使用Effect

这似乎是一个奇怪的问题,但我useEffect在 React 中并没有真正看到很多用例(我目前正在研究几千行的 React 代码库,并且从未使用过一次),而且我认为可能有一些我不完全掌握。

如果您正在编写功能组件,那么将“效果”代码放在useEffect钩子中与简单地在功能组件的主体中执行(也在每次渲染时执行)有什么区别?

一个典型的用例是在安装组件时获取数据:我看到了两种方法,一种有useEffect,一种没有:

// without useEffect
const MyComponent = () => {
    [data, setData] = useState();
    if (!data) fetchDataFromAPI().then(res => setData(res));

    return(
        {data ? <div>{data}</div> : <div>Loading...</div>}
    )
}
Run Code Online (Sandbox Code Playgroud)
// without useEffect
const MyComponent = () => {
    [data, setData] = useState();
    if (!data) fetchDataFromAPI().then(res => setData(res));

    return(
        {data ? <div>{data}</div> : <div>Loading...</div>}
    )
}
Run Code Online (Sandbox Code Playgroud)

useEffect在这种用例中是否有优势(性能方面或其他方面)?

javascript reactjs react-hooks

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