我有一个具有以下服务的应用程序:
web/ - 在端口5000上保存并运行python 3 flask Web服务器.使用sqlite3.worker/- 有一个index.js文件,它是队列的工作者.Web服务器使用json API over port与此队列交互9730.工人使用redis进行存储.工作人员还将数据本地存储在文件夹中worker/images/现在这个问题只涉及到了worker.
worker/DockerfileFROM node:0.12
WORKDIR /worker
COPY package.json /worker/
RUN npm install
COPY . /worker/
Run Code Online (Sandbox Code Playgroud)
docker-compose.ymlredis:
image: redis
worker:
build: ./worker
command: npm start
ports:
- "9730:9730"
volumes:
- worker/:/worker/
links:
- redis
Run Code Online (Sandbox Code Playgroud)
当我运行时docker-compose build,一切都按预期工作,所有npm模块都/worker/node_modules按照我的预期安装.
npm WARN package.json unfold@1.0.0 No README data
> phantomjs@1.9.2-6 install /worker/node_modules/pageres/node_modules/screenshot-stream/node_modules/phantom-bridge/node_modules/phantomjs
> node install.js
<snip>
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时docker-compose up,我看到了这个错误:
worker_1 …Run Code Online (Sandbox Code Playgroud) 有没有办法更改node_modules文件夹位置?
例如:
- dir1
- dir2
- node_modules
Run Code Online (Sandbox Code Playgroud)
至:
- dir1
- dir2
- node_modules
Run Code Online (Sandbox Code Playgroud) 我们希望在多个项目中使用相同的构建系统.我有一个工作早午餐配置文件,我想放在一个git子模块中,以便可以在多个项目中引用该子模块,并且更改很容易传播(比复制和粘贴更不易碎,并设置brunch-config.js的权威来源) .
将brunch-config.js放在git子模块中会导致我的文件夹结构如下所示:
WebApp // git root
|---Brunch-Build-System // git submodule
| |---brunch-config.js
|---node_modules
|---source // all the source code I want compiled
Run Code Online (Sandbox Code Playgroud)
早午餐运行假设brunch-config.js将与正在编译的源相同或更高.在此设置中,情况并非如此.我已经尝试修改我的brunch-config.js使用相对路径无济于事.这是我files目前的Brunch配置块,没有任何相对路径尝试:
files: {
javascripts: {
joinTo: {
'js/lib.js': /^(?!source\/)/
},
entryPoints: {
'source/scripts/app.jsx': {
'js/app.js': /^source\//
},
}
},
stylesheets: {joinTo: 'css/core.css'}
}
Run Code Online (Sandbox Code Playgroud)
如果上面给出了所需的文件夹结构,我如何修改它以使用相对路径?这甚至可能吗?
项目设置
我有一个在本地 Docker 容器中运行的 Typescript 项目。我有以下两卷(在docker-compose.yml):
volumes:
- .:/node/app
Run Code Online (Sandbox Code Playgroud)
第一个卷是绑定安装,用于将我的应用程序的源代码复制到容器中。
- /node/app/node_modules/
Run Code Online (Sandbox Code Playgroud)
第二卷位于绑定安装座内。这意味着当npm install在容器内运行时,在项目的/node/app工作目录中,依赖项将仅安装到容器中的node_modules文件夹中。
我的理解是,这是允许主机和容器独立的常见做法node_modules。我进行此设置的目的是仅在主机中安装和运行一些工具,例如prettier,这样我就可以npm install --only=development在主机中安装 prettier ,因为它被指定为 devDependency ,现在我的编辑器可以使用 prettier 。
问题
在我的编辑器中,当打字稿编译器运行时,它显示“找不到模块”错误:
我的理解是发生这种情况是因为这些模块不在磁盘上。这是因为我上面的设置。我已经将node_modules包含非开发依赖项(如 React)的内容仅在容器内可用。
我的问题
我是 Docker 新手,我的理解是在容器内做事情通常很好,包括开发。我试图避免npm install在主机中,因为我并不真正想要或需要主机中的所有依赖项。在添加新的依赖项时,我也不想必须执行npm install两次,一次在主机上,一次在容器中。
如果导入的node_modules不存在,有没有办法阻止Typescript出错(比如只加载它们的类型定义,也许?),或者有没有办法以某种方式将Visual Studio Code中的Typescript编译器指向容器,这样它就可以无需在主机上安装它们即可看到它们,同时仍然允许我在主机上安装其他依赖项,例如更漂亮?
npm install或者是主机上的唯一方法?
我已经使用安装了一个小部件npm。它安装在node_modules文件夹下。我需要在其中包含小部件的javascript和CSS文件,View但是由于它们不在Web文件夹中,因此无法使用以下方法将它们包括在内:
<link href="{{ asset('assets/someFolder/.css') }}" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)
如何实现以上目标?
docker ×2
node.js ×2
npm ×2
brunch ×1
git ×1
javascript ×1
symfony ×1
typescript ×1
ubuntu-14.04 ×1