首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven构建在Jenkins上的NPM由于模块的递归(自)打包而花费了很长时间。

Maven构建在Jenkins上的NPM由于模块的递归(自)打包而花费了很长时间。
EN

Stack Overflow用户
提问于 2017-12-13 10:43:53
回答 1查看 1.1K关注 0票数 0

我目前正面临一个性能问题/ NPM (?)在通过Maven使用它的时候。

我在做什么:

  1. 使用https://github.com/eirslett/frontend-maven-plugin)安装节点& npm (如有必要)
  2. 通过npm安装安装构建工具npm依赖项(例如grunt-cli)。
  3. 将项目npm依赖项(例如jquery)安装到项目的特定位置(同时使用--全局和--前缀)
  4. 运行一些繁重的任务来修改/添加JS依赖项到项目的WAR中

同样的构建在Jenkins (Linux)上大约需要30分钟&在本地构建(Windows)上需要4到5分钟。

在第3步中,npm似乎需要很长时间才能实际获取某些内容(此处详细的npm输出)。在此期间,NPM似乎创建了一个package.tgz,它在Windows (本地)下只包含package.json,而在Linux (Jenkins)下,它在这样的结构中包含项目-依赖项-包名称的递归副本:

代码语言:javascript
复制
 package
 |-lib (+ package.json)
  |-node_modules
    |-project-Dependencies-package-name
      |-lib (+ package.json)
        |-node_modules
          |-project-Dependencies-package-name
            |-lib (+ package.json)
              ...

请注意,项目-依赖项-包名称的存在仅仅是因为package.json声明了项目JS依赖项,而“模块”从未在其他地方实际发布或使用。

代码语言:javascript
复制
[ERROR] npm verb addLocalTarball adding from inside cache /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package.tgz
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm correctMkdir not in flight; initializing
[ERROR] npm verb afterAdd /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package/package.json not in flight; writing
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm correctMkdir not in flight; initializing
[ERROR] npm verb afterAdd /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package/package.json written
[ERROR] npm info install project-Dependencies-package-name@0.0.1 into /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib
[ERROR] npm info installOne project-Dependencies-package-name@0.0.1
[ERROR] npm verb installOne of project-Dependencies-package-name to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib not in flight; installing
[ERROR] npm verb correctMkdir /usr/local/tomcat/.npm/_locks correctMkdir not in flight; initializing
[ERROR] npm verb lock using /usr/local/tomcat/.npm/_locks/compassDienste-Dependenc-39458a7b01736484.lock for /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name
[ERROR] npm verb unbuild lib/node_modules/project-Dependencies-package-name
[ERROR] npm info preuninstall project-Dependencies-package-name@0.0.1
[ERROR] npm info uninstall project-Dependencies-package-name@0.0.1
[ERROR] npm verb unbuild rmStuff project-Dependencies-package-name@0.0.1 from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules
[ERROR] npm info postuninstall project-Dependencies-package-name@0.0.1
[ERROR] npm verb gentlyRm don't care about contents; nuking /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name

[ERROR] npm verb tar unpack /usr/local/tomcat/.npm/project-Dependencies-package-name/0.0.1/package.tgz
[ERROR] npm verb tar unpacking to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name
[ERROR] npm verb gentlyRm don't care about contents; nuking /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name

[ERROR] npm verb write writing to /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json
[ERROR] npm info preinstall project-Dependencies-package-name@0.0.1
[ERROR] npm verb readDependencies loading dependencies from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json
[ERROR] npm verb readDependencies loading dependencies from /appl/tomcat-version/.jenkins/jobs/my-continous-build-workspace/workspace/my-project/src/main/javascript/dependencies/lib/node_modules/project-Dependencies-package-name/package.json

配置文件:

项目中模块的pom.xml,插件->执行部分

步骤1安装节点&如果未在当前计算机上安装npm

代码语言:javascript
复制
<execution>
  <id>install node</id>
  <goals>
    <goal>install-node-and-npm</goal>
  </goals>
  <configuration>
    <nodeVersion>v4.6.0</nodeVersion>
  </configuration>
</execution>

步骤2安装dev /build依赖项( grunt所需,请参见下面)

代码语言:javascript
复制
<execution>
  <id>npm install</id>
  <goals>
    <goal>npm</goal>
  </goals>
</execution>

步骤3安装实际的项目依赖项

代码语言:javascript
复制
<execution>
  <id>install project js dependencies</id>
  <goals>
    <goal>npm</goal>
  </goals>
  <configuration>
    <workingDirectory>src/main/javascript/dependencies</workingDirectory>
    <arguments>install --production --global --prefix ./ --userconfig=.npmrc</arguments>
  </configuration>
</execution>

步骤4对获取的依赖项执行更多的操作(从现在开始很好)

代码语言:javascript
复制
<execution>
  <id>grunt build</id>
  <goals>
    <goal>grunt</goal>
  </goals>
</execution>

.npmrc

代码语言:javascript
复制
registry = https://nexus.company.tld/nexus/content/groups/company-npm/

构建工具package.json

代码语言:javascript
复制
{
  "name": "build-tools",
  "version": "0.0.1",
  "devDependencies": {
    "grunt-cli": "~1.0.1",
    "grunt": "~0.4.5",
    "autoprefixer": "^7.1.2",
    "cssnano": "^3.10.0",
    "grunt-contrib-concat": "^1.0.1",
    "grunt-contrib-copy": "^1.0.0",
    "grunt-contrib-jshint": "^0.10.0",
    "grunt-contrib-sass": "^1.0.0",
    "grunt-contrib-uglify": "^0.5.1",
    "grunt-postcss": "^0.8.0",
    "grunt-sass": "^2.0.0",
    "pixrem": "^4.0.1"
  }
}

项目依赖关系package.json

代码语言:javascript
复制
{
  "name": "project-Dependencies-package-name",
  "version": "0.0.1",
  "dependencies": {
    "some-internal-js-project": "1.1.2",
    "tablesorter": "~2.18.4",
    "bootstrap": "^3.3.7",
    "html5shiv": "^3.7.3",
    "jquery": "^3.2.1",
    "jquery-dotdotdot": "^1.8.2",
    "jquery-ui": "^1.12.1",
    "jquery-ui-dist": "^1.12.1",
    "popper.js": "^1.12.3",
    "respond.js": "^1.4.2",
    "tooltipster": "^4.2.5",
    "bootstrap-sass": "^3.3.7"
  }

}

EN

回答 1

Stack Overflow用户

发布于 2017-12-21 09:34:50

解决方案:从步骤3的目标中删除所有参数。

拥有与其他目标不同的工作目录(步骤2),就足以将“项目依赖关系”NPM工件放置在一个文件夹中,而不是步骤2中的工件(“构建工具依赖关系”)。

我还是想了解到底是哪里出了问题/我做错了什么?

代码语言:javascript
复制
<execution>
    <id>install compass js dependencies</id>
    <goals>
        <goal>npm</goal>
    </goals>
    <configuration>
        <workingDirectory>src/main/javascript/dependencies</workingDirectory>
    </configuration>
</execution>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47791072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档