Docker 图片中的 Bitbucket 管道缺少 NPM 模块
Bitbucket Pipelines from Docker Image has Missing NPM Modules
问题
我的 Dockerfile
或 bitbucket-pipelines.yml
有什么问题?为什么 bitbucket 管道环境中缺少模块?
错误
当我尝试使用 Bitbucket Pipelines npm run build
我的 Vue2 项目和 webpack 时,我收到有关缺少模块的错误。
来自日志
npm run build
> people-is@1.0.0 build /opt/atlassian/pipelines/agent/build
> node build/build.js
module.js:549
throw err;
^
Error: Cannot find module 'cli-spinners'
文件
这是配置文件。
Dockerfile - builds cportwine/people-is
FROM node:8.10.0
RUN npm install
RUN npm install -g firebase-tools
CMD [ "npm", "run", "build" ]
bitbucket-pipelines.yml
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- npm run build
package.json
{
"name": "people-is",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "cportwine",
"private": true,
"scripts": {
"dev": "node build/dev-server.js",
"start": "node build/dev-server.js",
"build": "node build/build.js",
"deploy": "firebase deploy --token $FIREBASE_TOKEN"
},
"dependencies": {
"rxjs": "^5.5.8",
"uuid": "^3.2.1",
"vue": "^2.5.16",
"vue-json-excel": "^0.1.9",
"vue-router": "^2.8.1",
"vue-rx": "^5.0.0",
"vuefire": "^1.4.5",
"vuetify": "^0.15.2"
},
"devDependencies": {
"autoprefixer": "^7.2.6",
"babel-core": "^6.22.1",
"babel-loader": "^7.1.4",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^2.3.2",
"connect-history-api-fallback": "^1.5.0",
"copy-webpack-plugin": "^4.5.1",
"css-loader": "^0.28.11",
"cssnano": "^3.10.0",
"eslint": "^4.19.1",
"eslint-config-standard": "^11.0.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.9.0",
"eslint-plugin-html": "^4.0.2",
"eslint-plugin-promise": "^3.7.0",
"eslint-plugin-standard": "^3.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.16.3",
"extract-text-webpack-plugin": "^2.0.0",
"file-loader": "^0.11.1",
"firebase": "^4.12.0",
"firebase-tools": "^3.17.7",
"friendly-errors-webpack-plugin": "^1.1.3",
"html-webpack-plugin": "^2.28.0",
"http-proxy-middleware": "^0.17.3",
"opn": "^5.3.0",
"optimize-css-assets-webpack-plugin": "^2.0.0",
"ora": "^1.4.0",
"rimraf": "^2.6.0",
"semver": "^5.5.0",
"shelljs": "^0.7.6",
"url-loader": "^0.5.8",
"vue-loader": "^13.7.1",
"vue-style-loader": "^3.1.2",
"vue-template-compiler": "^2.5.16",
"vuex": "^2.5.0",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.11.1",
"webpack-dev-middleware": "^1.12.2",
"webpack-hot-middleware": "^2.21.2",
"webpack-merge": "^4.1.2"
},
"engines": {
"node": ">=8.10.0",
"npm": ">= 5.6.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
],
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://chaddportwine@bitbucket.org/jahnelgroup/people-is.git"
},
"keywords": [],
"license": "ISC",
"homepage": "https://bitbucket.org/jahnelgroup/people-is#readme"
}
我看到的
当我在两个环境中 ls
node_modules
文件夹时,它们不匹配。 bitbucket 管道中缺少模块。
本地文件夹
people-is/node_modules
...
chalk
char-spinner
chardet
check-types
chokidar
chownr
cipher-base
circular-json
cjson
clap
class-utils
clean-css
cli-boxes
cli-cursor
cli-spinners
cli-table
cli-table2
cli-width
cliui
...
bitbucket 文件夹
/opt/atlassian/pipelines/agent/build/node_modules
哇,缺少模块!
...
chalk
cli-cursor
co
...
我试过的
我在构建之前向 bitbucket-pipelines.yml
添加了一个命令到 npm install
。
bitbucket-pipelines.yml
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- npm install
- npm run build
这会向 /opt/atlassian/pipelines/agent/build/node_modules
.
添加一些额外的模块(例如错误中的 cli-spinners
)
bitbucket 文件夹
/opt/atlassian/pipelines/agent/build/node_modules
...
chalk
char-spinner
chardet
check-types
chokidar
chownr
cipher-base
circular-json
cjson
clap
class-utils
clean-css
cli-boxes
cli-cursor
cli-spinners
cli-table
cli-table2
cli-width
cliui
clone
clone-response
co
...
但是,由于缺少不同的模块,构建命令仍然失败。
错误
> people-is@1.0.0 build /opt/atlassian/pipelines/agent/build
> node build/build.js
module.js:549
throw err;
^
Error: Cannot find module './_safeGet'
解决方案
我现在可以构建应用程序,但我不知道为什么!
1 - 简化 Docker 文件
我删除了所有 npm 命令。也许 npm install
命令是多余的?使用 Docker 图像到 pre-install npm 包没有任何优势。
2 - 安装前删除 Node_Modules
使用bitbucket-pipelines.yml
,删除node_modules
文件夹,然后执行npm install -g npm
和npm install
和npm install -g firebase-tools
。
文件更改
bitbucket-pipelines.yml(添加行)
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- rm -r node_modules <---- remove
- npm install -g npm <---- install
- npm install <---- install
- npm install -g firebase-tools <---- install
- npm run build
Docker文件(删除行)
FROM node:8.10.0
<---- remove
CMD [ "npm", "run", "build" ]
回答 ?
我不确定为什么将所有 npm install
内容移动到 bitbucket.pipelines.yml
解决了我构建项目的问题。我认为 Docker 可以让我定义我的环境,例如,安装 node/npm 和 firebase 的版本。管道会 "run" 那。
如果有人能解释我遗漏了什么,我会接受这个答案。
回答
我收到了来自 Atlassian 团队的 support
- 在 docker 图片中留下
npm install -g firebase
。
- 将
npm install
从 docker 图片移动到
bitbucket-pipelines.yml 文件.
原因
node_modules
文件夹已在 .gitignore
中列出
tl;博士
我的错误 - 我忘记了 .gitignore
以及它如何影响源代码管理中的 node_modules
文件夹,例如 Bitbucket Pipelines。
我查看了我的 local node_modules
文件夹并在本地构建了它。
不过
根据设计,源代码管理中的 node_modules
与我的本地文件夹不同步,因为它包含在 .gitignore
文件中。
所以
我有必要使用 bitbucket-pipelines.yml rm node_modules
和 npm install
。现在,BitPipes 找到了我在本地安装的模块。
这是维护 package.json
的要点,但我感到困惑。
问题
我的 Dockerfile
或 bitbucket-pipelines.yml
有什么问题?为什么 bitbucket 管道环境中缺少模块?
错误
当我尝试使用 Bitbucket Pipelines npm run build
我的 Vue2 项目和 webpack 时,我收到有关缺少模块的错误。
来自日志
npm run build
> people-is@1.0.0 build /opt/atlassian/pipelines/agent/build
> node build/build.js
module.js:549
throw err;
^
Error: Cannot find module 'cli-spinners'
文件
这是配置文件。
Dockerfile - builds cportwine/people-is
FROM node:8.10.0
RUN npm install
RUN npm install -g firebase-tools
CMD [ "npm", "run", "build" ]
bitbucket-pipelines.yml
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- npm run build
package.json
{
"name": "people-is",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "cportwine",
"private": true,
"scripts": {
"dev": "node build/dev-server.js",
"start": "node build/dev-server.js",
"build": "node build/build.js",
"deploy": "firebase deploy --token $FIREBASE_TOKEN"
},
"dependencies": {
"rxjs": "^5.5.8",
"uuid": "^3.2.1",
"vue": "^2.5.16",
"vue-json-excel": "^0.1.9",
"vue-router": "^2.8.1",
"vue-rx": "^5.0.0",
"vuefire": "^1.4.5",
"vuetify": "^0.15.2"
},
"devDependencies": {
"autoprefixer": "^7.2.6",
"babel-core": "^6.22.1",
"babel-loader": "^7.1.4",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.6.1",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^2.3.2",
"connect-history-api-fallback": "^1.5.0",
"copy-webpack-plugin": "^4.5.1",
"css-loader": "^0.28.11",
"cssnano": "^3.10.0",
"eslint": "^4.19.1",
"eslint-config-standard": "^11.0.0",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.9.0",
"eslint-plugin-html": "^4.0.2",
"eslint-plugin-promise": "^3.7.0",
"eslint-plugin-standard": "^3.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.16.3",
"extract-text-webpack-plugin": "^2.0.0",
"file-loader": "^0.11.1",
"firebase": "^4.12.0",
"firebase-tools": "^3.17.7",
"friendly-errors-webpack-plugin": "^1.1.3",
"html-webpack-plugin": "^2.28.0",
"http-proxy-middleware": "^0.17.3",
"opn": "^5.3.0",
"optimize-css-assets-webpack-plugin": "^2.0.0",
"ora": "^1.4.0",
"rimraf": "^2.6.0",
"semver": "^5.5.0",
"shelljs": "^0.7.6",
"url-loader": "^0.5.8",
"vue-loader": "^13.7.1",
"vue-style-loader": "^3.1.2",
"vue-template-compiler": "^2.5.16",
"vuex": "^2.5.0",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.11.1",
"webpack-dev-middleware": "^1.12.2",
"webpack-hot-middleware": "^2.21.2",
"webpack-merge": "^4.1.2"
},
"engines": {
"node": ">=8.10.0",
"npm": ">= 5.6.0"
},
"browserslist": [
"> 1%",
"last 2 versions",
"not ie <= 8"
],
"main": "index.js",
"repository": {
"type": "git",
"url": "git+https://chaddportwine@bitbucket.org/jahnelgroup/people-is.git"
},
"keywords": [],
"license": "ISC",
"homepage": "https://bitbucket.org/jahnelgroup/people-is#readme"
}
我看到的
当我在两个环境中 ls
node_modules
文件夹时,它们不匹配。 bitbucket 管道中缺少模块。
本地文件夹
people-is/node_modules
...
chalk
char-spinner
chardet
check-types
chokidar
chownr
cipher-base
circular-json
cjson
clap
class-utils
clean-css
cli-boxes
cli-cursor
cli-spinners
cli-table
cli-table2
cli-width
cliui
...
bitbucket 文件夹
/opt/atlassian/pipelines/agent/build/node_modules
哇,缺少模块!
...
chalk
cli-cursor
co
...
我试过的
我在构建之前向 bitbucket-pipelines.yml
添加了一个命令到 npm install
。
bitbucket-pipelines.yml
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- npm install
- npm run build
这会向 /opt/atlassian/pipelines/agent/build/node_modules
.
cli-spinners
)
bitbucket 文件夹
/opt/atlassian/pipelines/agent/build/node_modules
...
chalk
char-spinner
chardet
check-types
chokidar
chownr
cipher-base
circular-json
cjson
clap
class-utils
clean-css
cli-boxes
cli-cursor
cli-spinners
cli-table
cli-table2
cli-width
cliui
clone
clone-response
co
...
但是,由于缺少不同的模块,构建命令仍然失败。
错误
> people-is@1.0.0 build /opt/atlassian/pipelines/agent/build
> node build/build.js
module.js:549
throw err;
^
Error: Cannot find module './_safeGet'
解决方案
我现在可以构建应用程序,但我不知道为什么!
1 - 简化 Docker 文件
我删除了所有 npm 命令。也许 npm install
命令是多余的?使用 Docker 图像到 pre-install npm 包没有任何优势。
2 - 安装前删除 Node_Modules
使用bitbucket-pipelines.yml
,删除node_modules
文件夹,然后执行npm install -g npm
和npm install
和npm install -g firebase-tools
。
文件更改
bitbucket-pipelines.yml(添加行)
image:
name: cportwine/people-is
pipelines:
default:
- step:
script:
- rm -r node_modules <---- remove
- npm install -g npm <---- install
- npm install <---- install
- npm install -g firebase-tools <---- install
- npm run build
Docker文件(删除行)
FROM node:8.10.0
<---- remove
CMD [ "npm", "run", "build" ]
回答 ?
我不确定为什么将所有 npm install
内容移动到 bitbucket.pipelines.yml
解决了我构建项目的问题。我认为 Docker 可以让我定义我的环境,例如,安装 node/npm 和 firebase 的版本。管道会 "run" 那。
如果有人能解释我遗漏了什么,我会接受这个答案。
回答
我收到了来自 Atlassian 团队的 support
- 在 docker 图片中留下
npm install -g firebase
。 - 将
npm install
从 docker 图片移动到 bitbucket-pipelines.yml 文件.
原因
node_modules
文件夹已在 .gitignore
tl;博士
我的错误 - 我忘记了 .gitignore
以及它如何影响源代码管理中的 node_modules
文件夹,例如 Bitbucket Pipelines。
我查看了我的 local node_modules
文件夹并在本地构建了它。
不过
根据设计,源代码管理中的 node_modules
与我的本地文件夹不同步,因为它包含在 .gitignore
文件中。
所以
我有必要使用 bitbucket-pipelines.yml rm node_modules
和 npm install
。现在,BitPipes 找到了我在本地安装的模块。
这是维护 package.json
的要点,但我感到困惑。