我最近一直在尝试 dockerize(用于开发和稍后用于生产)一个 MERN 堆栈应用程序,Node.js(更特别是 node_modules)和 Docker 之间的交互让我有点失望。在整个问题中,我将用于开发的计算机指定为“主机”。
在开发时,有没有一种方法可以在不将主机的 node_modules 文件夹安装到容器的情况下对 Node.js 应用程序进行 Dockerize 化?
我可以想到使用 Docker(及其 docker-compose 实用程序)进行开发的 3 大优势(我将其称为第 1、2 和 3 点):
docker-compose up数据库、后端和前端都已启动并运行)。前 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) 我有一个包含多个模块的插件包,每个模块定义一个类(每个类都是一个插件)。
我的包结构如下所示:
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) 这似乎是一个奇怪的问题,但我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在这种用例中是否有优势(性能方面或其他方面)?
docker ×1
javascript ×1
node-modules ×1
node.js ×1
python ×1
python-3.x ×1
react-hooks ×1
reactjs ×1