简体   繁体   English

Grunt:jit-grunt:找不到“量角器”任务的插件

[英]Grunt: jit-grunt: Plugin for the “protractor” task not found

I am new to yeoman/grunt/bower and I am working on setting up a angularjs project with:我是 yeoman/grunt/bower 的新手,我正在努力建立一个 angularjs 项目:

yo angular

I made some changes to gruntfile myself and recently I found protractor very useful and I wanted to add that to my project.我自己对 gruntfile 进行了一些更改,最近我发现量角器非常有用,我想将其添加到我的项目中。 I followed a lot of instructions online (like this one Integrating Protractor with Yeoman via Grunt 2 years ago) but I still cannot get protractor properly installed.我在网上遵循了很多说明(例如 2 年前通过 Grunt 将量角器与 Yeoman 集成),但我仍然无法正确安装量角器。

Here is my Gruntfile.js : (only showed relevant parts)这是我的Gruntfile.js :(只显示相关部分)

'use strict';
module.exports = function (grunt) {

  // Time how long tasks take. Can help when optimizing build times
  require('time-grunt')(grunt);

  // Automatically load required Grunt tasks
  require('jit-grunt')(grunt, {
    useminPrepare: 'grunt-usemin',
    ngtemplates: 'grunt-angular-templates',
    cdnify: 'grunt-google-cdn'
  });

  // Configurable paths for the application
  var appConfig = {
    app: require('./bower.json').appPath || 'app',
    dist: 'dist'
  };

  // Define the configuration for all the tasks
  grunt.initConfig({

    // Project settings
    yeoman: appConfig,

    ...
    ...

    // Automatically inject Bower components into the app
    wiredep: {
      app: {
        src: ['<%= yeoman.app %>/index.html'],
        ignorePath:  /\.\.\//
      },
      test: {
        devDependencies: true,
        src: '<%= karma.unit.configFile %>',
        ignorePath:  /\.\.\//,
        fileTypes:{
          js: {
            block: /(([\s\t]*)\/{2}\s*?bower:\s*?(\S*))(\n|\r|.)*?(\/{2}\s*endbower)/gi,
              detect: {
                js: /'(.*\.js)'/gi
              },
              replace: {
                js: '\'{{filePath}}\','
              }
            }
          }
      },
      sass: {
        src: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
        ignorePath: /(\.\.\/){1,2}bower_components\//
      }
    }, 

    ...
    ...

    // Test settings

    karma: {
      unit: {
        configFile: 'test/karma.conf.js',
        singleRun: true
      }
    },

    protractor: {
      options: {
        keepalive: true,
        configFile: 'protractor.conf.js'
      },
      run: {}
    }

  });

  grunt.registerTask('serve', 'Compile then start a connect web server', function (target) {
    if (target === 'dist') {
      return grunt.task.run(['build', 'connect:dist:keepalive']);
    }

    grunt.task.run([
      'clean:server',
      'wiredep',
      'concurrent:server',
      'postcss:server',
      'connect:livereload',
      'watch'
    ]);
  });

  grunt.registerTask('test', [
    'clean:server',
    'wiredep',
    'concurrent:test',
    'postcss',
    'connect:test',
    'karma',
    'protractor:run'
  ]);
};

Here is my package.json :这是我的package.json

{
  "name": "Website",
  "private": true,
  "devDependencies": {
    "autoprefixer-core": "^5.2.1",
    "compass": "^0.1.1",
    "grunt": "^0.4.5",
    "grunt-angular-templates": "^0.5.7",
    "grunt-concurrent": "^1.0.0",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-compass": "^1.0.0",
    "grunt-contrib-concat": "^0.5.0",
    "grunt-contrib-connect": "^0.9.0",
    "grunt-contrib-copy": "^0.7.0",
    "grunt-contrib-cssmin": "^0.12.0",
    "grunt-contrib-htmlmin": "^0.4.0",
    "grunt-contrib-imagemin": "^1.0.0",
    "grunt-contrib-jshint": "^0.11.0",
    "grunt-contrib-uglify": "^0.7.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-filerev": "^2.1.2",
    "grunt-google-cdn": "^0.4.3",
    "grunt-jscs": "^1.8.0",
    "grunt-karma": "^0.12.2",
    "grunt-newer": "^1.1.0",
    "grunt-ng-annotate": "^0.9.2",
    "grunt-postcss": "^0.5.5",
    "grunt-protractor-runner": "^3.0.0",
    "grunt-svgmin": "^2.0.0",
    "grunt-usemin": "^3.0.0",
    "grunt-wiredep": "^2.0.0",
    "jasmine-core": "^2.4.1",
    "jit-grunt": "^0.9.1",
    "jshint-stylish": "^1.0.0",
    "karma": "^0.13.22",
    "karma-jasmine": "^0.3.8",
    "karma-phantomjs-launcher": "^1.0.0",
    "karma2": "^0.13.22",
    "phantomjs-prebuilt": "^2.1.7",
    "protractor": "^3.0.0",
    "time-grunt": "^1.0.0"
  },
  "engines": {
    "node": ">=0.10.0"
  },
  "scripts": {
    "test": "karma start test/karma.conf.js",
    "install": "node node_modules/protractor/bin/webdriver-manager update"
  },
  "dependencies": {}
}

I used jit-grunt ( as default now ) so it will load those plugins for me.我使用了jit-grunt (现在默认),所以它会为我加载这些插件。

I have surely installed protractor and grunt-protractor-runner following the post I mentioned above and other sources like official website of protractor and grunt-protractor-runner .我实在安装protractorgrunt-protractor-runner之后我上面和其他来源,如官方网站提到的后protractorgrunt-protractor-runner In my local node_modules :在我的本地node_modules

$ ls node_modules/ | grep protractor
grunt-protractor-runner
protractor

But no matter what I do, I am still getting the error from grunt:但无论我做什么,我仍然从 grunt 中得到错误:

$ grunt protractor

jit-grunt: Plugin for the "protractor" task not found.
If you have installed the plugin already, please setting the static mapping.
See https://github.com/shootaroo/jit-grunt#static-mappings

Warning: Task "protractor" failed. Use --force to continue.

And running grunt test:并运行 grunt 测试:

$ grunt test

Running "clean:server" (clean) task
>> 1 path cleaned.

...
...

Running "karma:unit" (karma) task
01 05 2016 15:03:51.048:WARN [watcher]: Pattern 
01 05 2016 15:03:51.094:INFO [karma]: Karma v0.13.22 server started at http://localhost:8080/
01 05 2016 15:03:51.112:INFO [launcher]: Starting browser PhantomJS
01 05 2016 15:03:52.259:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#68w8QMUehAm8AAf2AAAA with id 17032121
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 2 of 2 SUCCESS (0.003 secs / 0.026 secs)

jit-grunt: Plugin for the "protractor" task not found.
If you have installed the plugin already, please setting the static mapping.
See https://github.com/shootaroo/jit-grunt#static-mappings

Warning: Task "protractor:run" failed. Use --force to continue.

Aborted due to warnings.

Is there something I missed?有什么我错过了吗? I have been stuck with this for days.我已经被这个问题困扰了好几天。 Any help is much appreciated.非常感谢任何帮助。

Thanks for the suggestion and hint from @theaccordance.感谢@theaccordance 的建议和提示。 Turns out that JIT-grunt probably has some difficulty loading grunt-protractor-runner .事实证明, JIT-grunt加载grunt-protractor-runner可能有些困难。

Adding grunt.loadNpmTasks('grunt-protractor-runner');添加grunt.loadNpmTasks('grunt-protractor-runner'); in Gruntfile.js will resolve the problem.在 Gruntfile.js 中将解决这个问题。

The accepted answer follows an anti-pattern and defeats the purpose of the JIT (Just In Time) plugin loader for Grunt.接受的答案遵循反模式,违背了 Grunt 的 JIT(及时)插件加载器的目的。

The goal of jit-grunt is to automatically load the required plugins and thus makes the use of grunt.loadNpmTasks obsolete. jit-grunt的目标是自动加载所需的插件,从而淘汰grunt.loadNpmTasks的使用。

The documentation for jit-grunt explains how the plugin loader is looking for the plugins: jit-grunt文档解释了插件加载器如何寻找插件:

Will automatically search for the plugin from the task name.会自动从任务名称中搜索插件。 Search in the following order:按以下顺序搜索:

  1. node_modules/grunt-contrib-task-name node_modules/grunt-contrib-task-name
  2. node_modules/grunt-task-name node_modules/grunt-task-name
  3. node_modules/task-name节点模块/任务名称

Since you have a task protractor , the plugin loader will try to find a corresponding plugin in this order:由于您有一个任务protractor ,插件加载器将尝试按以下顺序查找相应的插件:

  1. grunt-contrib-protractor
    • doesn't exist in packages.json不存在于packages.json
  2. grunt-protractor
    • doesn't exist in packages.json不存在于packages.json
  3. protractor
    • found in packages.json !packages.json找到!
    • unfortunately there is a mismatch不幸的是有一个不匹配
    • the required plugin for the task protractor is grunt-protractor-runner任务protractor所需的插件是grunt-protractor-runner

In this case we can set the static mapping, as the error message points out.在这种情况下,我们可以设置静态映射,正如错误消息指出的那样。 We do this in the format taskname : grunt_plugin_name :我们以taskname : grunt_plugin_name的格式执行此grunt_plugin_name

// Automatically load required Grunt tasks
require('jit-grunt')(grunt, {
    useminPrepare: 'grunt-usemin',
    ngtemplates: 'grunt-angular-templates',
    cdnify: 'grunt-google-cdn',
    protractor: 'grunt-protractor-runner'
});

This is an old question, but I hope my answer can help other people who encounter this problem.这是一个老问题,但我希望我的回答可以帮助其他遇到此问题的人。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM