2017-02-27 34 views
0

我已经用Node.js和Koa构建了一个小应用。我正在使用Cloud9 IDE,并且可以直接从Cloud 9运行我的应用程序,没有任何问题。我正在尝试部署到Heroku(通过github)。但是,我在Heroku上启动的应用程序无法修复时收到错误。我认为这是一个问题,我如何设置目录和Heroku无法找到依赖模块,但我对Node/Koa是新手,无法弄清楚如何解决这个问题。我的代码是在这里:https://github.com/infornite/n4nite-apiHeroku与webpack和babel-loader相关的启动Node/Koa应用时出错

错误日志从Heroku的: enter image description here

Webpack.config.js

const webpack = require('webpack'); 
const path = require('path'); 
const fs = require('fs'); 

const externals = fs.readdirSync('node_modules') 
    .filter(x => ['.bin'].indexOf(x) === -1) 
    .reduce((obj, mod) => { 
     obj[mod] = 'commonjs ' + mod; 
     return obj; 
    }, {}); 

externals['koa-neo4j/check'] = 'commonjs koa-neo4j/check'; 
externals['koa-neo4j/preprocess'] = 'commonjs koa-neo4j/preprocess'; 
externals['koa-neo4j/postprocess'] = 'commonjs koa-neo4j/postprocess'; 
externals['koa-neo4j/debug'] = 'commonjs koa-neo4j/debug'; 
externals['koa-neo4j/util'] = 'commonjs koa-neo4j/util'; 

const plugins = []; 

const config = { 
    target: 'node', 
    entry: { 
     './server': './src/server.js' 
    }, 
    devtool: 'source-map', 
    output: { 
     path: './', 
     filename: '[name].js', 
     library: '[name]', 
     libraryTarget: 'umd', 
     umdNamedDefine: true 
    }, 
    externals: externals, 
    module: { 
     rules: [ 
      { 
       test: /\.jsx?$/, 
       exclude: /(node_modules)/, 
       loader: 'babel-loader' 
      } 
     ] 
    }, 
    resolve: { 
     extensions: ['.js'] 
    }, 
    plugins: plugins 
}; 

module.exports = config; 

的package.json

{ 
    "name": "n4nite-api", 
    "version": "0.1.0", 
    "description": "An API for the Infornite Metadata Management Tool", 
    "credits": "koa-neo4j-starter-kit/Keyvan Mir Mohammad Sadeghi <[email protected]>", 
    "main": "server.js", 
    "jsnext:main": "./src/server.js", 
    "scripts": { 
    "lint": "./node_modules/.bin/eslint ./src --fix", 
    "dev": "./node_modules/.bin/webpack --progress --colors --watch", 
    "build": "./node_modules/.bin/webpack", 
    "start": "npm run build && DEV=1 node $NODE_DEBUG_OPTION server.js", 
    "serve": "npm run build && node server.js" 
    }, 
    "author": "Keyvan Mir Mohammad Sadeghi <[email protected]>", 
    "devDependencies": { 
    "babel": "^6.5.2", 
    "babel-cli": "^6.11.4", 
    "babel-core": "^6.13.2", 
    "babel-eslint": "^6.1.2", 
    "babel-loader": "^6.2.4", 
    "babel-plugin-add-module-exports": "^0.2.1", 
    "babel-plugin-syntax-async-functions": "^6.13.0", 
    "babel-plugin-syntax-object-rest-spread": "^6.13.0", 
    "babel-plugin-transform-es2015-arrow-functions": "^6.8.0", 
    "babel-plugin-transform-es2015-destructuring": "^6.9.0", 
    "babel-plugin-transform-es2015-for-of": "^6.8.0", 
    "babel-plugin-transform-es2015-modules-commonjs": "^6.14.0", 
    "babel-plugin-transform-es2015-modules-umd": "^6.12.0", 
    "babel-plugin-transform-es2015-parameters": "^6.11.4", 
    "babel-plugin-transform-es2015-spread": "^6.8.0", 
    "babel-plugin-transform-object-rest-spread": "^6.8.0", 
    "babel-plugin-transform-regenerator": "^6.14.0", 
    "babel-plugin-transform-runtime": "^6.12.0", 
    "babel-plugin-transform-strict-mode": "^6.11.3", 
    "babel-preset-es2015": "^6.6.0", 
    "babel-preset-stage-0": "^6.5.0", 
    "babel-register": "^6.7.2", 
    "coffee-loader": "^0.7.2", 
    "eslint": "^3.3.1", 
    "eslint-loader": "^1.5.0", 
    "eslint-plugin-babel": "^3.3.0", 
    "webpack": "^2.1.0-beta.27" 
    }, 
    "dependencies": { 
    "koa-neo4j": "^1.0.0" 
    } 
} 

回答

1

Heroku默认不安装devDependenciesNode.js devDependencies)。您有几种可能性来解决这一问题:

  • 把必要的依赖于dependencies而不是devDependencies
  • 禁用生产模式:heroku config:set NPM_CONFIG_PRODUCTION=false
  • 本地构建并直接推送构建的文件。

选择一个你喜欢的,但通常最好是在本地构建它,因此在部署时不需要安装所有依赖关系。

+0

非常感谢 - 我花了数小时试图弄清楚这一点。 – n4nite

+0

另一个可以让你在Heroku上构建的替代方案是编写一个'postinstall'操作来加载开发依赖,构建,然后清理开发依赖。看到这个答案:http://stackoverflow.com/a/42237745/673882 –