Javascript heroku在构建依赖项时不使用babel编译代码

Javascript heroku在构建依赖项时不使用babel编译代码,javascript,node.js,heroku,babeljs,Javascript,Node.js,Heroku,Babeljs,Heroku正在成功构建我的应用程序,但是当我转到部署的url时,我得到一个应用程序错误,当我检查日志时,我发现它无法读取它试图在上运行的未编译服务器代码 与此不同的是,我有一个procfile,我已经测试了我的procfile,它运行良好 我已经成功地将问题缩小到heroku无法使用babel编译服务器代码 下面是运行heroku logs--tail时的日志错误 2019-02-15T22:28:03.169864+00:00 app[web.1]: yarn run v1.14.0 201

Heroku正在成功构建我的应用程序,但是当我转到部署的url时,我得到一个应用程序错误,当我检查日志时,我发现它无法读取它试图在
上运行的未编译服务器代码

与此不同的是,我有一个procfile,我已经测试了我的procfile,它运行良好

我已经成功地将问题缩小到heroku无法使用babel编译服务器代码

下面是运行heroku logs--tail时的日志错误

2019-02-15T22:28:03.169864+00:00 app[web.1]: yarn run v1.14.0
2019-02-15T22:28:03.298039+00:00 app[web.1]: $ NODE_ENV=production node compiled/server/server.js
2019-02-15T22:28:03.410030+00:00 app[web.1]: /app/compiled/server/server.js:1
2019-02-15T22:28:03.410035+00:00 app[web.1]: (function (exports, require, module, __filename, __dirname) { import express from 'express';
2019-02-15T22:28:03.410037+00:00 app[web.1]: ^^^^^^^
2019-02-15T22:28:03.410039+00:00 app[web.1]: 
2019-02-15T22:28:03.410041+00:00 app[web.1]: SyntaxError: Unexpected identifier
2019-02-15T22:28:03.410043+00:00 app[web.1]: at new Script (vm.js:79:7)
2019-02-15T22:28:03.410045+00:00 app[web.1]: at createScript (vm.js:251:10)
2019-02-15T22:28:03.410047+00:00 app[web.1]: at Object.runInThisContext (vm.js:303:10)
2019-02-15T22:28:03.410049+00:00 app[web.1]: at Module._compile (internal/modules/cjs/loader.js:657:28)
2019-02-15T22:28:03.410051+00:00 app[web.1]: at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
2019-02-15T22:28:03.410052+00:00 app[web.1]: at Module.load (internal/modules/cjs/loader.js:599:32)
2019-02-15T22:28:03.410054+00:00 app[web.1]: at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
2019-02-15T22:28:03.410056+00:00 app[web.1]: at Function.Module._load (internal/modules/cjs/loader.js:530:3)
2019-02-15T22:28:03.410058+00:00 app[web.1]: at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
2019-02-15T22:28:03.410060+00:00 app[web.1]: at startup (internal/bootstrap/node.js:283:19)
2019-02-15T22:28:03.498430+00:00 heroku[web.1]: Process exited with status 1

以下是我的npm脚本:

"scripts": {
    "dev": "./node_modules/.bin/nodemon.js server/server.js --watch server --exec babel-node",
    "build": "yarn build:next && yarn build:server",
    "build:next": "next build",
    "build:server": "./node_modules/.bin/babel server -d compiled/server",
    "start": "NODE_ENV=production node compiled/server/server.js",
    "heroku-postbuild": "yarn build && cat compiled/server/server.js"
  },
请注意,我将
cat
添加到
heroku postbuild
中,以便确认服务器未被传输(请参见下文)

根据以下职位的建议:

我已将所有babel依赖项从devdependency移动到依赖项。以下heroku构建日志是在
依赖项中运行的。(与他们的帖子不同,我的heroku构建运行成功,没有任何警告说它找不到babel依赖项

Heroku构建日志:

orpheus@Ryan:~/code/oip/nextjs-oip-hdmw$ git push heroku master
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 354 bytes | 354.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote: -----> Node.js app detected
remote:        
remote: -----> Creating runtime environment
remote:        
remote:        NPM_CONFIG_LOGLEVEL=error
remote:        NODE_ENV=production
remote:        NODE_MODULES_CACHE=true
remote:        NODE_VERBOSE=false
remote:        
remote: -----> Installing binaries
remote:        engines.node (package.json):  ^10.14.2
remote:        engines.npm (package.json):   unspecified (use default)
remote:        engines.yarn (package.json):  ^1.12.3
remote:        
remote:        Resolving node version ^10.14.2...
remote:        Downloading and installing node 10.15.1...
remote:        Using default npm version: 6.4.1
remote:        Resolving yarn version ^1.12.3...
remote:        Downloading and installing yarn (1.14.0)...
remote:        Installed yarn 1.14.0
remote:        
remote: -----> Restoring cache
remote:        - node_modules
remote:        
remote: -----> Building dependencies
remote:        Installing node modules (yarn.lock)
remote:        yarn install v1.14.0
remote:        [1/4] Resolving packages...
remote:        success Already up-to-date.
remote:        Done in 1.78s.
remote:        Detected both "build" and "heroku-postbuild" scripts
remote:        Running heroku-postbuild (yarn)
remote:        yarn run v1.14.0
remote:        $ yarn build && cat compiled/server/server.js
remote:        $ yarn build:next && yarn build:server
remote:        $ next build
remote:        [10:25:50 PM] Compiling client
remote:        [10:25:51 PM] Compiling server
remote:        > Using external babel configuration
remote:        > Location: "/tmp/build_1571297117a8f31e1fa30a1e57c004ff/.babelrc"
remote:        [10:26:01 PM] Compiled server in 10s
remote:        [10:26:11 PM] Compiled client in 21s
remote:        $ ./node_modules/.bin/babel server -d compiled/server
remote:        Successfully compiled 2 files with Babel.
remote:        import express from 'express';
remote:        import next from 'next';
remote:        import path from 'path';
remote:        import helmet from 'helmet';
remote:        
remote:        require('dotenv').config();
remote:        
remote:        import logger from './logs';
remote:        
remote:        var _require = require(path.resolve('./', 'lib/api/getRootUrl')),
remote:            getRootUrl = _require.getRootUrl;
remote:        
remote:        var dev = process.env.NODE_ENV !== 'production';
remote:        var port = process.env.PORT || 7000;
remote:        var ROOT_URL = getRootUrl();
remote:        var app = next({
remote:          dev: dev
remote:        });
remote:        var handle = app.getRequestHandler();
remote:        var URL_MAP = {
remote:          // example URL_MAP
remote:          '/load': '/public/load'
remote:        };
remote:        app.prepare().then(function () {
remote:          var server = express();
remote:          server.use(helmet());
remote:        
remote:          if (!dev) {
remote:            server.set('trust proxy', 1);
remote:          }
remote:        
remote:          server.get('*', function (req, res) {
remote:            var url = URL_MAP[req.path];
remote:        
remote:            if (url) {
remote:              var query = req.query.query;
remote:              app.render(req, res, url, query);
remote:            } else {
remote:              handle(req, res);
remote:            }
remote:          });
remote:          server.listen(port, function (err) {
remote:            if (err) throw err;
remote:            logger.info("> Ready on ".concat(ROOT_URL));
remote:          });
remote:        });Done in 24.59s.
remote:        
remote: -----> Caching build
remote:        - node_modules
remote:        
remote: -----> Pruning devDependencies
remote:        yarn install v1.14.0
remote:        [1/4] Resolving packages...
remote:        [2/4] Fetching packages...
remote:        info fsevents@1.2.7: The platform "linux" is incompatible with this module.
remote:        info "fsevents@1.2.7" is an optional dependency and failed compatibility check. Excluding it from installation.
remote:        [3/4] Linking dependencies...
remote:        warning " > babel-jest@23.6.0" has unmet peer dependency "babel-core@^6.0.0 || ^7.0.0-0".
remote:        warning "next-images > file-loader@3.0.1" has unmet peer dependency "webpack@^4.0.0".
remote:        warning "next-images > url-loader@1.1.2" has unmet peer dependency "webpack@^3.0.0 || ^4.0.0".
remote:        [4/4] Building fresh packages...
remote:        warning Ignored scripts due to flag.
remote:        Done in 58.13s.
remote:        
remote: -----> Build succeeded!
remote:  !     Unmet dependencies don't fail yarn install but may cause runtime issues
remote:        https://github.com/npm/npm/issues/7494
remote: 
remote:        
remote: -----> Opting in to new default build script behavior
remote:        You have set "heroku-run-build-script"=true in your package.json
remote:        Your app will be unaffected by the change on March 11, 2019
remote:        
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote: 
remote: -----> Compressing...
remote:        Done: 130.6M
remote: -----> Launching...
remote:        Released v21
remote:        https://limitless-thicket-16836.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/limitless-thicket-16836.git
   441f024..97d87ef  master -> master

在这两行之后:

remote:        $ ./node_modules/.bin/babel server -d compiled/server
remote:        Successfully compiled 2 files with Babel.
您可以看到未翻译的
cat
'd服务器代码。 当我打开deploy链接时,它会输出一个我已经在上面发布的日志错误(意外标识符)

我能做的唯一一件事就是在推送到Heroku之前传输我的代码,让Heroku只运行下一个构建

我的依赖项:

 "dependencies": {
    "@babel/cli": "^7.2.3",
    "@babel/core": "^7.2.2",
    "@babel/node": "^7.2.2",
    "@babel/preset-env": "^7.2.3",
    "babel-eslint": "^10.0.1",
    "babel-jest": "^23.6.0",
    ...
}

我遗漏了什么?如何让Heroku正确使用babel传输我的代码?

如果依赖项看起来不错,请将此脚本添加到package.json中

    "heroku-prebuild": "rm -rf node_modules",


您的依赖项看起来不错,请在package.json中添加此脚本

    "heroku-prebuild": "rm -rf node_modules",