eggjs / egg

🥚 Born to build better enterprise frameworks and apps with Node.js & Koa
https://eggjs.org
MIT License
18.88k stars 1.81k forks source link

TypeError: Cannot read property 'use' of undefined #450

Closed myfreax closed 7 years ago

myfreax commented 7 years ago

app.js


module.exports = app => {
    app.view.use('handlebars', require('./lib/view'));
};

执行yarn test

  1) test/egg-view-handlebars.test.js render "before all" hook:
     TypeError: Cannot read property 'use' of undefined
      at module.exports.app (app.js:8:11)
      at AppWorkerLoader.loadFile (node_modules/egg-core/lib/loader/egg_loader.js:217:34)
      at getLoadUnits.forEach.unit (node_modules/egg-core/lib/loader/mixin/custom.js:25:29)
      at Array.forEach (native)
      at AppWorkerLoader.loadCustomApp (node_modules/egg-core/lib/loader/mixin/custom.js:25:8)
      at AppWorkerLoader.load (node_modules/egg/lib/loader/app_worker_loader.js:33:10)
      at MeesengerApplication.Application (node_modules/egg/lib/application.js:34:19)
      at MeesengerApplication (node_modules/egg-mock/lib/app.js:221:7)
      at MockApplication.[init] (node_modules/egg-mock/lib/app.js:67:29)
      at undefined.next (native)
      at onFulfilled (node_modules/co/index.js:65:19)
      at process._tickCallback (internal/process/next_tick.js:103:7)

怎么解决这个问题

popomore commented 7 years ago

1.0.0-rc.1 中 egg-view 应该是默认开启的,如果你用 yarn 先检查下依赖是否更新

myfreax commented 7 years ago

@popomore yarn upgrade 后还是一样的问题

popomore commented 7 years ago

恩,先确定版本看,去 node_modules 找下 egg 的 package.json

dead-horse commented 7 years ago

@huangyanxiong01 将 ${baseDir}/run/application_config.js 贴上来,让我们看一下依赖的版本。

myfreax commented 7 years ago

@popomore

{
  "name": "egg",
  "version": "1.0.0-rc.1",
  "description": "A web framework's framework for Node.js",
  "keywords": [
    "web",
    "app",
    "http",
    "application",
    "framework",
    "middleware",
    "koa",
    "egg"
  ],
  "dependencies": {
    "accepts": "^1.3.3",
    "agentkeepalive": "^3.1.0",
    "cluster-client": "^1.3.0",
    "co": "^4.6.0",
    "debug": "^2.6.1",
    "delegates": "^1.0.0",
    "egg-cluster": "^1.5.0",
    "egg-cookies": "^2.2.0",
    "egg-core": "^2.1.1",
    "egg-development": "^1.2.0",
    "egg-i18n": "^1.1.0",
    "egg-jsonp": "^1.0.0",
    "egg-logger": "^1.5.0",
    "egg-logrotator": "^2.2.2",
    "egg-multipart": "^1.1.0",
    "egg-onerror": "^1.3.0",
    "egg-schedule": "^2.3.0",
    "egg-security": "^1.6.0",
    "egg-session": "^1.1.0",
    "egg-static": "^1.2.0",
    "egg-userrole": "^1.1.1",
    "egg-userservice": "^1.0.0",
    "egg-validate": "^1.0.0",
    "egg-view": "^1.0.0",
    "egg-watcher": "^2.1.0",
    "graceful": "^1.0.1",
    "is-type-of": "^1.0.0",
    "koa-bodyparser": "^2.3.0",
    "koa-is-json": "^1.0.0",
    "mime-types": "^2.1.14",
    "sendmessage": "^1.1.0",
    "urllib": "^2.20.0",
    "utility": "^1.11.0"
  },
  "devDependencies": {
    "autod": "^2.7.1",
    "autod-egg": "^1.0.0",
    "coffee": "^3.3.0",
    "egg-alinode": "^1.0.3",
    "egg-bin": "^2.2.1",
    "egg-mock": "^3.0.1",
    "egg-plugin-puml": "^1.0.0",
    "egg-view-nunjucks": "^2.0.0",
    "eslint": "^3.16.0",
    "eslint-config-egg": "^3.2.0",
    "formstream": "^1.1.0",
    "gh-pages": "^0.12.0",
    "glob": "^7.1.1",
    "jsdoc": "^3.4.3",
    "ko-sleep": "^1.0.2",
    "merge-descriptors": "^1.0.1",
    "moment": "^2.17.1",
    "mz": "^2.6.0",
    "mz-modules": "^1.0.0",
    "once": "^1.3.3",
    "pedding": "^1.1.0",
    "rds": "^0.1.0",
    "rimraf": "^2.6.0",
    "runscript": "^1.2.0",
    "should": "^11.2.0",
    "supertest": "^3.0.0",
    "taffydb": "^2.7.3"
  },
  "main": "index.js",
  "files": [
    "app",
    "config",
    "bin",
    "lib",
    "index.js"
  ],
  "scripts": {
    "lint": "eslint app config lib test *.js",
    "test": "npm run lint -- --fix && npm run test-local",
    "test-local": "egg-bin test",
    "cov": "egg-bin cov",
    "ci": "npm run lint && npm run cov",
    "doc-server": "./scripts/doc.js server",
    "doc-build": "./scripts/doc.js build",
    "doc-deploy": "./scripts/doc.js deploy",
    "autod": "autod",
    "puml": "puml . --dest ./docs",
    "commits": "./scripts/commits.sh"
  },
  "homepage": "https://github.com/eggjs/egg",
  "repository": {
    "type": "git",
    "url": "https://github.com/eggjs/egg.git"
  },
  "engines": {
    "node": ">= 6.0.0"
  },
  "license": "MIT"
}
myfreax commented 7 years ago

@dead-horse

{
  "config": {
    "onerror": {
      "errorPageUrl": "",
      "appErrorFilter": null
    },
    "userservice": {
      "service": {}
    },
    "userrole": {},
    "session": {
      "maxAge": 86400000,
      "key": "EGG_SESS",
      "httpOnly": true,
      "encrypt": true,
      "overwrite": true,
      "signed": true
    },
    "i18n": {
      "defaultLocale": "en_US",
      "dir": "/home/huangyanxiong/language/javascript/egg-view-handlebars/config/locales",
      "queryField": "locale",
      "cookieField": "locale",
      "cookieMaxAge": "1y",
      "functionName": "__",
      "dirs": [
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-onerror/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-userservice/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-userrole/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-session/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-i18n/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-validate/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-watcher/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-multipart/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-security/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-development/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-schedule/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-logrotator/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-static/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-jsonp/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-view/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/locales",
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/config/locales"
      ]
    },
    "watcher": {
      "type": "development",
      "eventSources": {
        "default": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-watcher/lib/event-sources/default",
        "development": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-watcher/lib/event-sources/development"
      }
    },
    "multipart": {
      "autoFields": false,
      "defaultCharset": "utf8",
      "fieldNameSize": 100,
      "fieldSize": 102400,
      "fields": 10,
      "fileSize": 10485760,
      "files": 10,
      "fileExtensions": [],
      "whitelist": null
    },
    "security": {
      "domainWhiteList": [],
      "protocolWhiteList": [],
      "defaultMiddleware": "csrf,hsts,methodnoallow,noopen,nosniff,csp,xssProtection,xframe",
      "csrf": {
        "enable": true,
        "useSession": false,
        "ignoreJSON": false,
        "cookieName": "csrfToken",
        "sessionName": "csrfToken",
        "headerName": "x-csrf-token",
        "bodyName": "_csrf",
        "queryName": "_csrf"
      },
      "xframe": {
        "enable": true,
        "value": "SAMEORIGIN"
      },
      "hsts": {
        "enable": false,
        "maxAge": 31536000,
        "includeSubdomains": false
      },
      "methodnoallow": {
        "enable": true
      },
      "noopen": {
        "enable": true
      },
      "nosniff": {
        "enable": true
      },
      "xssProtection": {
        "enable": true,
        "value": "1; mode=block"
      },
      "csp": {
        "enable": false,
        "policy": {}
      }
    },
    "helper": {
      "shtml": {}
    },
    "development": {
      "watchDirs": [],
      "ignoreDirs": [],
      "fastReady": true
    },
    "logrotator": {
      "filesRotateByHour": null,
      "filesRotateBySize": null,
      "maxFileSize": 52428800,
      "maxFiles": 10,
      "rotateDuration": 60000,
      "maxDays": 31
    },
    "static": {
      "prefix": "/public/",
      "dir": "/home/huangyanxiong/language/javascript/egg-view-handlebars/app/public",
      "dynamic": true,
      "preload": false,
      "buffer": false
    },
    "jsonp": {
      "limit": 50,
      "callback": "_callback",
      "csrf": false
    },
    "view": {
      "root": [
        "/home/huangyanxiong/language/javascript/egg-view-handlebars/app/view"
      ],
      "cache": true,
      "defaultExtension": ".html",
      "defaultViewEngine": "",
      "mapping": {}
    },
    "env": "local",
    "name": "egg-view-handlebars",
    "keys": "",
    "proxy": false,
    "protocolHeaders": "x-forwarded-proto",
    "ipHeaders": "x-forwarded-for",
    "hostHeaders": "x-forwarded-host",
    "pkg": {
      "name": "egg-view-handlebars",
      "version": "0.0.1",
      "main": "index.js",
      "repository": {},
      "eggPlugin": {
        "name": "view"
      },
      "keywords": [
        "egg",
        "eggPlugin",
        "egg-plugin",
        "egg-plugin-view",
        "handlebars",
        "template"
      ],
      "author": "huangyanxiong",
      "license": "MIT",
      "dependencies": {
        "egg": "^1.0.0-rc.1",
        "handlebars": "^4.0.6"
      },
      "devDependencies": {
        "egg-bin": "^2.2.1",
        "egg-ci": "^1.1.0",
        "egg-mock": "^3.0.1",
        "egg-view": "^1.0.0",
        "eslint": "^3.16.1",
        "eslint-config-egg": "^3.2.0",
        "marked": "^0.3.6",
        "supertest": "^3.0.0"
      }
    },
    "baseDir": "/home/huangyanxiong/language/javascript/egg-view-handlebars",
    "HOME": "/home/huangyanxiong",
    "rundir": "/home/huangyanxiong/language/javascript/egg-view-handlebars/run",
    "notfound": {
      "pageUrl": ""
    },
    "siteFile": {
      "/favicon.ico": {
        "type": "Buffer",
        "data": [
          137
        ]
      }
    },
    "bodyParser": {
      "enable": true,
      "encoding": "utf8",
      "formLimit": "100kb",
      "jsonLimit": "100kb",
      "strict": true,
      "queryString": {
        "arrayLimit": 100,
        "depth": 5,
        "parameterLimit": 1000
      }
    },
    "logger": {
      "dir": "/home/huangyanxiong/language/javascript/egg-view-handlebars/logs/egg-view-handlebars",
      "encoding": "utf8",
      "env": "local",
      "level": "DEBUG",
      "consoleLevel": "INFO",
      "outputJSON": false,
      "buffer": false,
      "appLogName": "egg-view-handlebars-web.log",
      "coreLogName": "egg-web.log",
      "agentLogName": "egg-agent.log",
      "errorLogName": "common-error.log",
      "coreLogger": {
        "consoleLevel": "WARN"
      },
      "type": "application"
    },
    "httpclient": {
      "keepAlive": true,
      "freeSocketKeepAliveTimeout": 4000,
      "timeout": 30000,
      "maxSockets": null,
      "maxFreeSockets": 256,
      "enableDNSCache": false
    },
    "coreMiddleware": [
      "meta",
      "siteFile",
      "notfound",
      "static",
      "bodyParser",
      "userservice",
      "session",
      "i18n",
      "securities"
    ],
    "workerStartTimeout": 600000,
    "coreMiddlewares": [
      "meta",
      "siteFile",
      "notfound",
      "static",
      "bodyParser",
      "userservice",
      "session",
      "i18n",
      "securities"
    ],
    "appMiddlewares": [],
    "appMiddleware": [],
    "multipartParseOptions": {
      "autoFields": false,
      "defCharset": "utf8",
      "limits": {
        "fieldNameSize": 100,
        "fieldSize": 102400,
        "fields": 10,
        "fileSize": 10485760,
        "files": 10
      }
    }
  },
  "plugins": {
    "onerror": {
      "enable": true,
      "package": "egg-onerror",
      "name": "onerror",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-onerror",
      "version": "1.3.0"
    },
    "userservice": {
      "enable": true,
      "package": "egg-userservice",
      "name": "userservice",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-userservice",
      "version": "1.0.0"
    },
    "userrole": {
      "enable": true,
      "package": "egg-userrole",
      "name": "userrole",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-userrole",
      "version": "1.1.1"
    },
    "session": {
      "enable": true,
      "package": "egg-session",
      "name": "session",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-session",
      "version": "1.1.0"
    },
    "i18n": {
      "enable": true,
      "package": "egg-i18n",
      "name": "i18n",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-i18n",
      "version": "1.1.0"
    },
    "validate": {
      "enable": true,
      "package": "egg-validate",
      "name": "validate",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-validate",
      "version": "1.0.0"
    },
    "watcher": {
      "enable": true,
      "package": "egg-watcher",
      "name": "watcher",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-watcher",
      "version": "2.1.0"
    },
    "multipart": {
      "enable": true,
      "package": "egg-multipart",
      "name": "multipart",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-multipart",
      "version": "1.1.0"
    },
    "security": {
      "enable": true,
      "package": "egg-security",
      "name": "security",
      "dependencies": [
        "session"
      ],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-security",
      "version": "1.6.0"
    },
    "development": {
      "enable": true,
      "package": "egg-development",
      "name": "development",
      "dependencies": [
        "watcher"
      ],
      "optionalDependencies": [],
      "env": [
        "local"
      ],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-development",
      "version": "1.2.0"
    },
    "schedule": {
      "enable": true,
      "package": "egg-schedule",
      "name": "schedule",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-schedule",
      "version": "2.3.0"
    },
    "logrotator": {
      "enable": true,
      "package": "egg-logrotator",
      "name": "logrotator",
      "dependencies": [
        "schedule"
      ],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-logrotator",
      "version": "2.2.2"
    },
    "static": {
      "enable": true,
      "package": "egg-static",
      "name": "static",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-static",
      "version": "1.2.0"
    },
    "jsonp": {
      "enable": true,
      "package": "egg-jsonp",
      "name": "jsonp",
      "dependencies": [],
      "optionalDependencies": [
        "security"
      ],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-jsonp",
      "version": "1.0.0"
    },
    "view": {
      "enable": true,
      "package": "egg-view",
      "name": "view",
      "dependencies": [],
      "optionalDependencies": [],
      "env": [],
      "from": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg/config/plugin.js",
      "path": "/home/huangyanxiong/language/javascript/egg-view-handlebars/node_modules/egg-view",
      "version": "1.0.0"
    }
  }
}
atian25 commented 7 years ago

单元测试代码也贴贴。或者你直接把你的这个插件上传到 github

myfreax commented 7 years ago

@atian25 https://github.com/huangyanxiong01/egg-view-handlebars 代码在这里

popomore commented 7 years ago

Plugin 名字不应该是 view

myfreax commented 7 years ago

@popomore 那个文件?

atian25 commented 7 years ago

package.json,eggPlugin.name 改掉

发自我的 iPhone

在 2017年2月25日,18:20,Freax notifications@github.com 写道:

@popomore 那个文件?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

myfreax commented 7 years ago

已更改

atian25 commented 7 years ago

那问题应该解决了吧?

myfreax commented 7 years ago

解决了,可以说下执行流程吗?

dead-horse commented 7 years ago

https://github.com/eggjs/egg/issues/398

之后 egg-view 是主插件,类似 handlebars、nunjucks 等插件都是它上面的扩展,所以他们的插件名不能叫 egg-view。

surya-tamirisa commented 5 years ago

english please

atian25 commented 5 years ago

@surya-tamirisa sorry, we will.