Docker中运行Nodejs和Webpack若干问题的解决
Nodejs的版本兼容性较差,而NPM的若干模块又经常下载、安装出现问题,Webpack里面也会有一些奇特的设置,通过Docker运行可以减少这些问题,但也会出现一些新的问题。
因为Nodejs可能出现的问题五花八门,因此这里不描述出现的问题,只是给出一些有可能解决的办法,不能包治百病,需要去尝试。
1、安装
Node的官方镜像版本是很多的,在 https://hub.docker.com/_/node/ 里通过指定node:tag就可以选择安装需要的版本。
- 创建odejs服务Docker方法,参见 https://my.oschina.net/u/2306127/blog/1609913
请记住:
- 原则上不要运行update/upgrade来更新系统,因为更新后的有些软件可能有版本冲突,导致nodejs运行不正确!
原则上,运行:
npm i
安装时需要使用代理,否则很多模块可能都会安装失败。npm的代理设置proxy和https-proxy方法如下:
npm config set proxy http://proxy.company.com:8080 npm config set https-proxy http://proxy.company.com:8080
别的方法,比如环境变量HTTP_PROXY,貌似不管用(nodejs就这么任性!!!)
如果在MacOS或者Linux下设了全局代理,问题就简单多了。
但是,即便设了代理,还是可能访问失败,可以多搞一次试试。
2、访问
如果使用了Webpack,缺省情况下,Docker里面使用run/exec进去是可以wget localhost的,但是映射到主机的端口从外面就访问不了,虽然里面仍然是使用的localhost或者127.0.0.1地址。解决方法如下:
指定host为0.0.0.0
运行 webpack-dev 时,使用:
webpack-dev-server --host 0.0.0.0 --port 80
在使用FileNation时,在package.json里搜索下,就能找到。
以及设置 webpack.config.js:
entry: [
'webpack-dev-server/client?http://0.0.0.0:80',
config.paths.demo
]
注意,如果使用hot loading, 你还必须:
运行 webpack-dev 使用参数:
webpack-dev-server --host 0.0.0.0 --port 80
然后设置 webpack.config.js:
entry: [
'webpack-dev-server/client?http://0.0.0.0:80',
'webpack/hot/only-dev-server',
config.paths.demo
],
....
plugins:[new webpack.HotModuleReplacementPlugin()]
另外的解决方法:
在 https://www.jianshu.com/p/04eca89456d9 上的:
- 使用dev-server时, 在
webpack.config.js
添加选项官档参考链接
devServer: {
historyApiFallback: true,
noInfo: false,
host: '0.0.0.0',
port: 8080
},
watch: true,
watchOptions: {
ignored: /node_modules/,
aggregateTimeout: 300,
poll: 500
},
- 在
webpack-dev-middleware
的options
中加入watchOptions
选项官档参考链接
var devMiddleware = require('webpack-dev-middleware')(compiler, {
publicPath: webpackConfig.output.publicPath,
quiet: true,
stats: {
colors: true,
chunks: false
},
watchOptions: {
aggregateTimeout: 300,
poll: true
}
})
如果还搞不定,更多的方法可以尝试:
- https://stackoverflow.com/questions/33272967/how-to-make-the-webpack-dev-server-run-on-port-80-and-on-0-0-0-0-to-make-it-publ
- https://github.com/webpack/webpack-dev-server/issues/547