【问题标题】:Node/NPM/Grunt failing on jscs (grunt-jscs)Node/NPM/Grunt 在 jscs 上失败 (grunt-jscs)
【发布时间】:2016-03-15 02:20:43
【问题描述】:

我有一个在 javascript 代码库上运行 JSCS 的 grunt 任务,它一直在工作,直到需要与使用最新、稳定版本的 grunt、npm/node 的构建服务器集成。

这一切在 npm 1.XX.X 下运行良好,但在我升级到 2.XX.X 后它坏了。我尝试了最新的 3.XX.X,但以与 2.XX.X 相同的方式失败。

我认为需要的相关部分是

cli 输出:

$ node -v
v5.2.0

$ npm -v
3.3.12

$ grunt --version
grunt-cli v0.1.13
grunt v0.4.5

$ grunt jscs
Loading "jscs.js" tasks...ERROR
>> TypeError: fn.call is not a function
Warning: Task "jscs" not found. Use --force to continue.

Aborted due to warnings.

package.json:

{
"name": "Javascript",
  "version": "1.0.0",
  "private": true,
  "devDependencies": {
    "grunt": "~0.4.5",
    "matchdep": "^0.3.0",
    "grunt-contrib-watch": "~0.6.1",
    "grunt-express": "~1.4.1",
    "grunt-open": "~0.2.3",
    "grunt-chmod": "~1.0.3",
    "grunt-contrib-jshint": "~0.11.3",
    "grunt-contrib-uglify": "~0.10.0",
    "karma": "~0.13.15",
    "grunt-karma": "~0.12.1",
    "jasmine-core": "~2.3.4",
    "karma-jasmine": "~0.3.6",
    "phantomjs": "~1.9.18",
    "karma-phantomjs-launcher": "~0.2.1",
    "angular-mocks": "~1.2.28",
    "jquery": "~2.1.4",
    "underscore": "~1.8.3",
    "grunt-contrib-clean": "~0.6.0",
    "karma-coverage": "~0.5.3",
    "grunt-jscs": "~2.3.0",
    "grunt-contrib-concat": "~0.5.1"
  }
}

Gruntfile.js 配置:

module.exports = function (grunt) {
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);

grunt.initConfig({
    .....
    jscs: {
        src: [
            'gruntfile.js',
            '<%= sourceFolder %>/**/*.js',
            '!<%= sourceFolder %>/angular/**',
            '!<%= sourceFolder %>/es5-shim/**',
            '!<%= sourceFolder %>/**/*[.-]min.js',
            '!<%= sourceFolder %>/respond/*.js',
            '!<%= sourceFolder %>/angular-ui-bootstrap/*.js',
            '!<%= sourceFolder %>/analytics/angulartics*.js'
        ],
        options: {
            config: '.jscsrc',
            fix: true
        }
    }
});

【问题讨论】:

  • 我猜 jscs 已安装并在构建服务器上工作?
  • 问题是我在本地运行旧版本的 node/npm,然后在该环境中进行构建从未奏效。所以,不,构建服务器没有也从来没有工作过。在 ~1.X 节点/npm 上本地工作正常。
  • 您是否尝试过完全删除 node_modules、清除 npm 缓存并重新创建项目的 npm install
  • 是的,我有...(愚蠢的字符限制)

标签: javascript node.js gruntjs jscs


【解决方案1】:

grunt-express 项目包含导致此失败的依赖项。 grunt-express 已超过 2 年未发布,因此我选择移至 grunt-contrib-connect 并改用它,这解决了我的问题! 希望对遇到此问题的人有所帮助。

【讨论】:

    【解决方案2】:

    刚刚创建了一个测试项目,我能够重现该问题。它在这一行:

    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
    

    改用load-grunt-tasks

    require('load-grunt-tasks')(grunt);
    

    同时运行npm i --save-dev load-grunt-tasks,一切顺利!

    【讨论】:

    • 这似乎没有奏效。我仍然收到完全相同的错误
    • 你能做一个npm prune吗?
    • 这太奇怪了。我能够通过上述步骤重现并修复它。今晚晚些时候我会再试一次并设置一个演示项目。
    • 您能否再次复制并修复此问题?
    【解决方案3】:

    每当我遇到与 node.js/npm 升级相关的构建问题时,10/10 次它都是错误的依赖项。

    尝试将 grunt-jscs 依赖项提升到 2.5: https://www.npmjs.com/package/grunt-jscs

    【讨论】:

    • 碰撞似乎没有帮助:/
    • 错误输出有什么不同吗?尽可能多地尝试碰撞 - 你正在运行 node/npm 的前沿版本。我跳到了 4.x 系列,gulp 需要大量的东西才能重新开始工作——我猜 grunt 是同一个故事。
    • 我使用ncu 来检查更新,所有不是最新的都是angular-mocks(就像那样,因为我使用的是旧版本的angular)。同样的错误
    猜你喜欢
    • 1970-01-01
    • 2015-03-28
    • 2019-03-06
    • 1970-01-01
    • 2015-09-20
    • 2017-02-22
    • 2016-03-13
    • 2015-07-29
    • 1970-01-01
    相关资源
    最近更新 更多