【发布时间】:2021-11-07 05:54:04
【问题描述】:
我在 Symfony 4 项目上工作了几个月,我想将它 Dockerize。
除了 Webpack,我让所有东西都能正常工作,我用它来编译我的 .scss 和 .js 文件,使用 npm run watch 或 npm run dev 命令。
实际上 webpack 不会监听我在 .scss 或 .js 文件中所做的更改。
这是我的配置,我肯定错过了我的文件中的某些内容。
我的docker-compose.yml:
version: '3.8'
services:
mysql:
image: mysql:8.0
command: --default-authentication-plugin=mysql_native_password
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: rootpassword
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: on-failure
depends_on:
- mysql
ports:
- '8004:80'
environment:
PMA_HOSTS: mysql
php:
build:
context: .
dockerfile: php/Dockerfile
volumes:
- '../.:/usr/src/app'
restart: on-failure
env_file:
- .env
nginx:
image: nginx:1.19.0-alpine
restart: on-failure
volumes:
- '../public:/usr/src/app'
- './nginx/default.conf:/etc/nginx/conf.d/default.conf:ro'
ports:
- '80:80'
depends_on:
- php
node:
build:
context: .
dockerfile: node/Dockerfile
volumes:
- '../.:/usr/src/app'
command: npm run watch
我的Dockerfile 用于节点图像:
FROM node:12.10.0
RUN apt-get update && \
apt-get install -y \
curl
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
WORKDIR /usr/src/app
CMD ["npm", "run", "watch"]
我的webpack.config.js:
var Encore = require('@symfony/webpack-encore');
var CopyWebpackPlugin = require('copy-webpack-plugin');
if (!Encore.isRuntimeEnvironmentConfigured()) {
Encore.configureRuntimeEnvironment(process.env.NODE_ENV || 'dev');
}
Encore
.setOutputPath('public/build/')
.setPublicPath('/build')
.addEntry('app', './assets/js/app.js')
.splitEntryChunks()
.disableSingleRuntimeChunk()
.enableSassLoader()
.cleanupOutputBeforeBuild()
.enableBuildNotifications()
.enableSourceMaps(!Encore.isProduction())
.enableVersioning(Encore.isProduction())
.configureBabel(() => {}, {
useBuiltIns: 'usage',
corejs: 3
})
.addPlugin(new CopyWebpackPlugin([
{ from: './assets/pictures', to: 'pictures' }
]))
;
module.exports = Encore.getWebpackConfig();
// module.exports = {
// mode: 'development',
// devServer: {
// port: 80,
// host: '0.0.0.0',
// disableHostCheck: true,
// watchOptions: {
// ignored: /node_modules/,
// poll: 1000,
// aggregateTimeout: 1000
// }
// }
// }
如你所见,我已经在webpack.config.js 中尝试了一些东西,我看到了很多关于watchOptions 的东西,但我没有明白。
这是我的项目组织:
我希望能够使用 Webpack 启动我的 Docker,实时监听我所做的任何更改。
这是运行docker-compose up后的命令控制台:
console command docker-compose up
如果您有一些改进我的 Docker 环境的建议,我会全力以赴!
谢谢!
【问题讨论】:
-
如果您使用 WSL2 运行 Windows,如果文件存储在 Windows 文件系统中,则不会将文件更改事件发送到容器。文档说“如果原始文件存储在 Linux 文件系统中,Linux 容器只会接收文件更改事件(“inotify 事件”)。例如,一些 Web 开发工作流依赖 inotify 事件在文件更改时自动重新加载。 docs.docker.com/desktop/windows/wsl
-
您好@HansKilian,是的,我忘了说,我在带有 Docker 桌面应用程序的 Windows 10 上运行。是的,我使用 WSL2。我的项目存储在我的主磁盘上,但我想我没有得到你的所有解释。我必须检查这个“inotify events”才能完成这项工作?我是 Docker 的初学者:/
-
这更详细地说明了它为什么不起作用以及如何解决它。就我个人而言,我认为将我的文件存储在 WSL 文件系统中太麻烦了,我放弃了让它工作。 levelup.gitconnected.com/…
标签: node.js docker symfony npm webpack