2017-05-25 41 views
0

解決需要幾個額外的巴貝爾預設(我的劇本故宮建什麼)之後,那麼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

你的配置是好的,從你表現出來,我認爲。

現在遇到了要求NPM重建節點薩斯--force

你有.dockerignore文件在項目文件夾設置?如果不是,請添加一個,並在該文件中包含node_modules。它與.gitignore的格式相同。

https://docs.docker.com/engine/reference/builder/#dockerignore-file

我的想法是,要複製您的主機操作系統的文件夾node_modules到錯誤泊塢窗圖像。 npm install進程沒有取代它,因爲它看到包已經存在。

通過添加.dockerignore並告訴它不要複製node_modules文件夾,您將強制docker映像安裝模塊。這樣,node-sass模塊(需要原生版本)將被正確編譯。

webpack花了很長時間建立,3-4分鐘。

你在使用Mac嗎? Docker存在一個已知問題,即硬盤驅動器訪問比本地驅動器訪問慢很多倍,甚至在Linux上也是如此。

Windows並不像mac那麼糟糕,但它仍然比linux差。

不幸的是,你幾乎沒有什麼可以做的。您已經在使用node_modules文件夾的卷......您可以嘗試將卷添加到webpack構建內容的臨時文件夾中,但這樣做只會使性能提高25%左右。