malaporte / nashorn-commonjs-modules

CommonJS modules support for Nashorn
MIT License
108 stars 31 forks source link

[Question/Help] require failing in CI environment #24

Closed dandew closed 7 years ago

dandew commented 7 years ago

I realize this is a long shot ("help me debug my server!") but I'm kind of at wit's ends.

I'm using handlebars as a dependency in an Atomist rug project, which behind the scene relies on nashorn-commonjs-modules 1.0.8. Everything works fine locally (tested on Debian and MacOS) but one require fails for a library when the same code is run on a CI server. I've also tried running the build locally using the same Docker image used by CI and can't reproduce the issue. At this point, I'm thinking the only difference would be in the environment passed to the Docker container (NPM config, networking...) because otherwise everything else is the same (same Java version, same libraries...).

Anyhow, enough ado, here is the stack I am getting:

Caused by: .atomist/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js:16 Error: Module not found: ./code-gen
    at com.coveo.nashorn_modules.Module.throwModuleNotFoundException(Module.java:365)
    at com.coveo.nashorn_modules.Module.require(Module.java:126)
    at jdk.nashorn.internal.scripts.Script$Recompilation$260$60AAAAA$javascript_compiler$cu1$restOf.L:1(.atomist/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js:16)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:647)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:117)
    at com.coveo.nashorn_modules.Module.compileJavaScriptModule(Module.java:334)
    at com.coveo.nashorn_modules.Module.compileModuleAndPutInCache(Module.java:288)
    at com.coveo.nashorn_modules.Module.loadModuleAsFile(Module.java:202)
    at com.coveo.nashorn_modules.Module.attemptToLoadFromThisFolder(Module.java:177)
    at com.coveo.nashorn_modules.Module.require(Module.java:116)
    at jdk.nashorn.internal.scripts.Script$Recompilation$252$60AAAAA$handlebars$cu1$restOf.L:1(.atomist/node_modules/handlebars/dist/cjs/handlebars.js:22)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:667)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:117)
    at com.coveo.nashorn_modules.Module.compileJavaScriptModule(Module.java:334)
    at com.coveo.nashorn_modules.Module.compileModuleAndPutInCache(Module.java:288)
    at com.coveo.nashorn_modules.Module.loadModuleAsFile(Module.java:202)
    at com.coveo.nashorn_modules.Module.attemptToLoadFromThisFolder(Module.java:177)
    at com.coveo.nashorn_modules.Module.require(Module.java:116)
    at jdk.nashorn.internal.scripts.Script$Recompilation$30$60AAAAA$index.:scopeCall(.atomist/node_modules/handlebars/lib/index.js)
    at jdk.nashorn.internal.scripts.Script$Recompilation$30$60AAAAA$index.L:1(.atomist/node_modules/handlebars/lib/index.js:7)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:667)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:117)
    at com.coveo.nashorn_modules.Module.compileJavaScriptModule(Module.java:334)
    at com.coveo.nashorn_modules.Module.compileModuleAndPutInCache(Module.java:288)
    at com.coveo.nashorn_modules.Module.loadModuleAsFile(Module.java:202)
    at com.coveo.nashorn_modules.Module.loadModuleThroughPackageJson(Module.java:247)
    at com.coveo.nashorn_modules.Module.loadModuleAsFolder(Module.java:215)
    at com.coveo.nashorn_modules.Module.attemptToLoadFromThisFolder(Module.java:181)
    at com.coveo.nashorn_modules.Module.searchForModuleInNodeModules(Module.java:150)
    at com.coveo.nashorn_modules.Module.require(Module.java:122)
    at jdk.nashorn.internal.scripts.Script$Recompilation$25$Common$cu1$restOf.L:1(.atomist/editors/Common.js:5)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:628)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.ScriptObjectMirror.call(ScriptObjectMirror.java:117)
    at com.coveo.nashorn_modules.Module.compileJavaScriptModule(Module.java:334)
    at com.coveo.nashorn_modules.Module.compileModuleAndPutInCache(Module.java:288)
    at com.coveo.nashorn_modules.Module.loadModuleAsFile(Module.java:202)
    at com.coveo.nashorn_modules.Module.attemptToLoadFromThisFolder(Module.java:177)
    at com.coveo.nashorn_modules.Module.require(Module.java:116)
    at jdk.nashorn.internal.scripts.Script$Recompilation$7$Common.:program(.atomist/editors/Common.js:1)
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:637)
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:449)

And here is the beginning of javascript-compiler.js where the failing require('./code-gen') is located. Note that requires above it work fine. And yes, code-gen.js is in the same dir as javascript-compiler.js.

'use strict';

exports.__esModule = true;
// istanbul ignore next

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

var _base = require('../base');

var _exception = require('../exception');

var _exception2 = _interopRequireDefault(_exception);

var _utils = require('../utils');

var _codeGen = require('./code-gen');

var _codeGen2 = _interopRequireDefault(_codeGen);

Is this familiar by any chance? What type of environment change could influence this? How could I debug this, knowing that I can't attach a remote debugger to the JVM.

Any pointer/advice/hope would be very appreciated 😄

dandew commented 7 years ago

This was an issue in Atomist: https://github.com/atomist/artifact-source/issues/29