我有一个使用swagger-express-mw
库的应用程序,我按以下方式启动我的应用程序:
SwaggerExpress.create({ appRoot: __dirname }, (err, swaggerExpress) => {
// initialize application, connect to db etc...
}
在我的本地OSX机器上一切正常。但是,当我使用boot2docker从我的应用程序构建图像并运行它时,我收到以下错误:
/usr/src/app/node_modules/swagger-node-runner/index.js:154
config.swagger = _.defaults(readEnvConfig(),
^
TypeError: Cannot assign to read only property 'swagger' of [object Object]
我的dockerfile看起来像这样(没什么特别的):
FROM node:latest
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm set progress=false
RUN npm install
COPY . /usr/src/app
EXPOSE 5000
CMD ["npm", "run", "dev"]
是否有其他人遇到类似的情况,当地环境有效,但应用程序在docker容器内引发错误?
谢谢!
答案 0 :(得分:1)
您的问题似乎与Docker容器或计算机设置有关。该错误不是docker错误,这是一个JavaScript错误。
docker容器似乎在严格模式下运行JavaScript模块,在该模式下,您无法分配给只读对象属性(https://msdn.microsoft.com/library/br230269%28v=vs.94%29.aspx)。在您的OSX主机上,根据我们所掌握的有限信息,它看起来没有在严格模式下运行。
有几种方法可以指定"严格性"你的脚本我已经看到你可以使用标记--use_strict
启动Node.js,但我不确定它是多么可靠。可能是NPM安装了不同版本的依赖模块,在不同版本中它们为严格模式指定了不同的规则。还有其他几种方法来定义"严格性"您的功能,模块或应用程序整体。
您可以使用以下建议来测试严格模式:Is there any way to check if strict mode is enforced?。
所以,总结一下:你的问题不是继承问题,而是你的javascript环境以不同的严格模式运行这个问题。你如何解决这个问题取决于定义严格的地方。
希望有所帮助!