2015-03-27 29 views
5

Używam aplikacji https://www.npmjs.com/package/googleapis w aplikacji Webpack ReactJS. Ma ostrzeżenie, że jest to wersja alfa, więc można się spodziewać problemów, a oto ten, który mam.Błędy w budowie gruntu za pomocą klienta google-api-nodejs z pakietem internetowym

npm install googleapis --save zainstalowany googleapis ok, dodany "googleapis": "^2.0.2" do mojego package.json, ale gdy uruchamiam grunt build uzyskać następujące ostrzeżenia (obserwowani przez wiele błędów, które wyślę na życzenie, ponieważ jest dużo tekstu) :

WARNING in ./~/googleapis/apis/index.js 
Critical dependencies: 
41:23-44 the request of a dependency is an expression 
@ ./~/googleapis/apis/index.js 41:23-44 

WARNING in ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 
Critical dependencies: 
403:34-60 the request of a dependency is an expression 
@ ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 403:34-60 

linia popełniła w ~/googleapis/apis/index.js jest:

var Endpoint = require(endpointPath); 

Jednym z błędów dostaję:

ERROR in ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 
Module not found: Error: Cannot resolve module 'fs' in /Users/dev/wwb-web-app/node_modules/googleapis/node_modules/request/node_modules/hawk/node_modules/hoek/lib 
@ ./~/googleapis/~/request/~/hawk/~/hoek/lib/index.js 3:9-22 

kod, który wymaga googleapis w moim React komponentu:

var gapi = require('googleapis'); 

Uwaga: Każdy inny kod z komponentu może być dostarczone na żądanie, ale nie wierzę, że to istotne dla tej kwestii.

Moi package.json zależności:

"dependencies": { 
"aws-sdk": "^2.0.21", 
"chalk": "^0.5.0", 
"crypto-js": "^3.1.2-5", 
"cryptojs": "^2.5.3", 
"envify": "^1.2.1", 
"fluxxor": "1.5.1", 
"googleapis": "^2.0.2", 
"imports-loader": "^0.6.3", 
"jquery": "~2.1.1", 
"moment": "^2.8.3", 
"react": "0.11.1", 
"react-bootstrap": "0.12.0", 
"react-router": "0.5.2", 
"react-router-bootstrap": "0.5.0" 
}, 
"devDependencies": { 
"connect-livereload": "^0.4.0", 
"css-loader": "^0.7.0", 
"es6-promise": "^1.0.0", 
"esrever": "^0.1.0", 
"grunt": "^0.4.5", 
"grunt-contrib-copy": "^0.5.0", 
"grunt-contrib-less": "~0.11.4", 
"grunt-contrib-uglify": "^0.7.0", 
"grunt-contrib-watch": "^0.6.1", 
"grunt-git": "^0.2.14", 
"grunt-gitinfo": "^0.1.6", 
"grunt-karma": "^0.8.3", 
"grunt-lesslint": "^1.1.13", 
"grunt-rsync": "^0.6.1", 
"grunt-ssh": "^0.11.2", 
"grunt-webpack": "^1.0.8", 
"jssha": "^1.5.0", 
"jsx-loader": "^0.10.2", 
"karma": "^0.12.17", 
"karma-chrome-launcher": "^0.1.7", 
"karma-coverage": "^0.2.7", 
"karma-jasmine": "^0.1.5", 
"karma-js-coverage": "^0.4.0", 
"karma-osx-reporter": "^0.1.0", 
"karma-phantomjs-launcher": "^0.1.4", 
"karma-sourcemap-loader": "^0.3.2", 
"karma-webpack": "^1.2.1", 
"load-grunt-tasks": "^0.6.0", 
"style-loader": "^0.6.4", 
"time-grunt": "^1.0.0", 
"webpack": "^1.4.15" 
} 

wersja npm wersja 2.5.1

węzeł v0.12.1

Dzięki z góry za wszelką pomoc!

Odpowiedz

0

Nie mam działającej odpowiedzi, ale również jej szukam. Czy jesteś dmk12 na GitHub? Jeśli nie, spojrzeć na ten problem:

https://github.com/google/google-api-nodejs-client/issues/403

Wygląda jak część problemu jest to, że biblioteka ma linię

var Endpoint = require(endpointPath);

który musi być oceniana, jako endpointPath jest zmienną. Niestety problem polega na tym, że prawdopodobnie nie zmienią tego zachowania, ponieważ dzięki nim ich kod stanie się bardziej elastyczny. Jedna osoba (może Ty?) Zaproponowała obejście tego problemu poprzez ładowanie interfejsów API za pomocą tagu <script> w index.html, ale to nie działa dla nas --- mój zespół i ja chcemy korzystać z API z kodu po stronie serwera.

Poszukiwanie odpowiedzi trwa.

+0

Tak, jestem dmk12 na Githubie, odpowiedziałem na twój komentarz. Polowanie trwa nadal. – dmk12

+0

Czy ktoś znajdzie na to odpowiedź? Mam ten sam problem. –

0

Zgodnie z wyjaśnieniami, użycie przeglądarki comments of the project team, nie jest obsługiwane w projekcie google-api-nodejs-client. Jest przeznaczony tylko do użytku po stronie serwera.

Aby rozwiązać szerszy problem używania interfejsów API Google z aplikacją React Webpack, przykładem może być klient Gmaila oparty na Redux z numerem NuclearMail.

W punkcie wejścia NuclearMail, w index.html ładuje pakiet WebPACK następuje przez obciążenie API Google z handleGoogleClientLoad callback:

<script src="app.js"></script> 
 
<script src="https://apis.google.com/js/client.js?onload=handleGoogleClientLoad"></script>

To zwrotna jest zdefiniowana w src/API.js:

/* global gapi */ 
 

 
import ActionType from './ActionType'; 
 
import store from './store'; 
 

 
window.handleGoogleClientLoad = function() { 
 
    tryAuthorize(true); 
 
}; 
 

 
function tryAuthorize(immediate) { 
 
    store.dispatch({type: ActionType.Authorization.REQUEST}); 
 
    gapi.auth.authorize(
 
    { 
 
     /*eslint-disable camelcase*/ 
 
     client_id: '108971935462-ied7vg89qivj0bsso4imp6imhvpuso5u.apps.googleusercontent.com', 
 
     /*eslint-enable*/ 
 
     scope: 'email https://www.googleapis.com/auth/gmail.modify', 
 
     immediate 
 
    }, 
 
    whenAuthenticated 
 
); 
 
} 
 

 
function whenAuthenticated(authResult) { 
 
    if (authResult && !authResult.error) { 
 
    store.dispatch({type: ActionType.Authorization.SUCCESS}); 
 
    gapi.client.load('gmail', 'v1', whenLoaded); 
 
    } else { 
 
    store.dispatch({type: ActionType.Authorization.FAILURE}); 
 
    } 
 
}