Skip to content

Third party library: google-protobuf eval issue #4016

@jorgjanke

Description

@jorgjanke

I am trying to install google-protobuf, which has two components
a) npm package
b) generated js files

OS?

Mac OSX Sierra

Versions.

angular-cli: 1.0.0-beta.24
node: 6.8.1
os: darwin x64
@angular/common: 2.4.1
@angular/compiler: 2.4.1
@angular/core: 2.4.1
@angular/forms: 2.4.1
@angular/http: 2.4.1
@angular/platform-browser: 2.4.1
@angular/platform-browser-dynamic: 2.4.1
@angular/router: 3.4.1
@angular/compiler-cli: 2.4.1

Repro steps.

per doc:

  1. npm install google-protobuf --save
    copied the protoc generated js files in a local folder libraries/protoc
  2. added in angular-cli.json:
      "scripts": [
        "../node_modules/google-protobuf/google-protobuf.js",
        "libraries/protoc/client_pb.js"
      ],
  1. in src/typings.d.ts:
declare module 'google-protobuf';
declare module 'client_pb';
  1. in the service
import * as googleProtobuf from 'google-protobuf';
import * as p from 'client_pb';

The log given by the failure.

after running ng build (no errors),
the scripts.bundle.js contains

/***/ 217:
/***/ function(module, exports) {
module.exports = "var COMPILED=!0,goog=...."...

and

/***/ 615:
/***/ function(module, exports) {
module.exports = "/**\n * @fileoverview\n * @enhanceable\n * @public\n */\n// GENERATED CODE..."...

(i.e. code is in quotes)

when running (ng serve), this creates errors like

VM739:321Uncaught ReferenceError: exports is not defined
    at eval (eval at module.exports (addScript.js:9), <anonymous>:321:471)
    at eval (<anonymous>)
    at module.exports (addScript.js:9)
    at Object.161 (google-protobuf.js?a64b:1)
    at __webpack_require__ (bootstrap 44c22f0…:52)
    at Object.720 (scripts.bundle.js:51)
    at __webpack_require__ (bootstrap 44c22f0…:52)
    at webpackJsonpCallback (bootstrap 44c22f0…:23)
    at scripts.bundle.js:1

looks to me that evaluating the code in the string causes these errors

Mention any other details that might be useful.

When using webpack 2.2 directly in a js project, it creates code like

/* 1 */
/***/ function(module, exports) {
var COMPILED=!0,goog=...

working fine
i.e. without bundling/eval the code in a string like

module.exports = "..."

Questions:

  • How do I include the js code directly in scripts.bundle.js (assume that the eval is the cause of the error)?
  • I copied the generated js code (i.e. not npm packaged) in the project and referenced it in the script file (see above) _ Is this the correct/recommended approach?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions