在解决了所需的几个额外的babel预设(我的npm脚本构建的内容),然后是unknown plugin "add-module-exports" in /node_modules/react-dropzone/.babelrc
之后,我现在遇到npm rebuild node-sass --force
的要求
此外,webpack需要很长时间,3-4分钟。
我感觉我的node_module文件夹或环境没有在这里正确设置。我目前的设置是否正在做一些我不知道的愚蠢行为?
.babelrc
{
"compact": false,
"presets": [
"es2015",
"es2015-loose",
"stage-2",
"stage-1",
"stage-0",
"react"
],
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}
}
Dockerfile:
FROM node:7.7.3
RUN npm install -g pm2 babel-cli
# Useful for reloading npm install if package json changed
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app
COPY . /usr/src/app
WORKDIR /usr/src/app
ADD .babelrc server.js index.js /usr/src/app/
CMD ["pm2", "start", "./index.js", "--no-daemon"]
EXPOSE 2020
搬运工-compose.yml
doc:
build: .
ports:
- "2020:2020"
volumes:
- .:/usr/src/app/
- /usr/src/app/node_modules
./ index.js
require('babel-register');
require('./server.js');
./ server.js
var express = require('express');
var path = require('path');
const isDeveloping = process.env.NODE_ENV !== 'production';
const PORT = isDeveloping ? 2020 : 2020; // process.env.PORT - docker?
const app = express();
if (isDeveloping) {
let webpack = require('webpack');
let webpackMiddleware = require('webpack-dev-middleware');
let webpackHotMiddleware = require('webpack-hot-middleware');
let config = require('./webpack.prod.config.js');
const compiler = webpack(config);
const middleware = webpackMiddleware(compiler, {
publicPath: config.output.publicPath,
noInfo: true,
quiet: false,
lazy: false,
watchOptions: {
aggregateTimeout: 300,
poll: true
},
stats: {
colors: true,
}
});
const bundlePath = path.join(__dirname, './dist/index.html');
app.use(middleware);
app.use(webpackHotMiddleware(compiler));
app.get('*', function response(req, res) {
res.write(middleware.fileSystem.readFileSync(bundlePath));
res.end();
});
} else {
console.log(process.env.NODE_ENV)
const staticPath = path.join(__dirname, 'dist')
app.use(express.static(staticPath));
}
app.listen(PORT)
console.log('Open up http://localhost:' + PORT);
答案 0 :(得分:0)
你的配置很好,从你所展示的,我认为。
现在遇到了npm rebuild node-sass --force
的要求
您的项目文件夹中是否设置了.dockerignore
文件?如果没有,请添加一个并在该文件中包含node_modules
。它与.gitignore
的格式相同。
https://docs.docker.com/engine/reference/builder/#dockerignore-file
我的想法是你错误地将主机操作系统的node_modules
文件夹复制到Docker镜像中。 npm install
进程没有替换它,因为它看到包已经存在。
通过添加.dockerignore
并告诉它不要复制node_modules文件夹,您将强制使用docker镜像来安装模块。这样,node-sass
模块(需要本机构建)将被正确编译。
你在Mac上吗? Docker有一个已知的问题,硬盘驱动器访问速度比本机驱动器访问慢很多倍,甚至是Linux上的Docker。webpack需要很长时间,3-4分钟。
Windows并不像mac那么糟糕,但它仍然比linux更差。
关于这一点,你无能为力......不幸的是,几乎没有。你已经在node_modules文件夹中使用了一个卷...你可以尝试将一个卷添加到webpack构建内容的临时文件夹中,但是你只能从中获得大约25%的性能提升。