2017-02-02 14 views
1

У меня есть проблема с browserify, я хочу связать следующий файл проекта node.js upload.js, я изменил файл по следующему коду и вызвал файл upload2. JS на одной и той же директории upload.js:Browsify не может вызвать функцию i bundle, она не определена

var SketchfabDataApi = require('../../index');  
var Swagger = require('swagger-client'); 
var fs = require('fs'); 
var path = require('path'); 
var api = new SketchfabDataApi(); 

    function UploadModelBySketchfabdataApi(token,idinputfile) { 
    //var file = jQuery(idinputfile)[0].files[0]; 
    var file = document.getElementById(idinputfile).files[0] 
    if (file) { 
     var fileName = file.name; 
    } 
    var fullPathFile = document.getElementById(idinputfile).value; 

    //var fullPathFile = window.location.protocol + "//" + window.location.host; 
    //if (window.location.port != "") fullPathFile += ":" + window.location.port + "/"; 
    //fullPathFile = fullPathFile + '/private/' + fileName; 

    console.info('START UPLOAD2:' + fullPathFile); 

    api.then(function (client) { 

    // This is how you authenticate your requests with the "Token" scheme 
    client.clientAuthorizations.add("Token", 
     new Swagger.ApiKeyAuthorization(
      "Authorization", 
      "Token " + token , 
      "header" 
     ) 
    ); 

    // This is how you upload a file 
    client.apis.models.post_v3_models({ 
     isPublished: 'false', 
     modelFile: fs.createReadStream(path.resolve(fullPathFile)), 
     private:false, 
    }).then(function (response) { 

     if (response.status === 201) { 
      // The model URI is immediately returned, even if processing hasn't finished yet 
      console.log('After processing, model will be available at: ' + 
       response.headers.location); 
      var uid = response.headers.location 
       .replace('https://api.sketchfab.com/v3/models/', ''); 

      // You can poll the processing status to know when the model is ready 
      // See how `pollStatus` is implemented below 
      pollStatus(client, 
       uid, 
       function (err, res) { 
        console.log(err, res); 
       }); 
      window.location.href = window.location.protocol + "//" + window.location.host + "/stealth/#/stealth/models3d/models3d"; 
     } 


    }).catch(function (error) { 
     console.error("ERROR ON UPLAOD:" + error); 
    }); 

}).catch(function (error) { 
    console.log("ERROR ON AUTHENTICATION:" + error); 
}); 

} 

    /** 
    * Poll processing status 
    * @param {object} client Swagger client 
    * @param {string} uid Model uid 
    * @param {function} callback will receive (err, result) 
    */ 
    function pollStatus(client, uid, callback) { 
     client.apis.models.get_v3_models_uid({ 
      uid: uid 
     }).then(function (response) { 
      if (response.obj.status.processing === 'SUCCEEDED') { 
       callback(null, response.obj.status); 
      } else if (response.obj.status.processing === 'FAILED') { 
       callback(response.obj.status.processing, null); 
      } else { 
       setTimeout(function() { 
        console.log(response.obj.status); 
        pollStatus(client, uid, callback); 
       }, 1000); 
      } 
     }); 
    } 

Теперь я запустить команду browserify,

browserify upload2.js -o bundleSketchFabDataApi.js -d 

и вот мой call.js сценарий:

<script type="text/javascript" src="vendor/sketchfab/SketchfabDataApi/bundleSketchFabDataApi.js"></script> 
<script type="text/javascript" src="vendor/sketchfab/SketchfabDataApi/SketchfabDataApi.js"></script> 
............................ 
    UploadModelBySketchfabdataApi("mytoken", "myfile"); 

, но я всегда та же ошибка на консоли «Reference неопределенен»: enter image description here

UPDATE Ty к dnitro предложение теперь я могу получить доступ к моей функции с переменным окном, но я должен продолжать делать что-то неправильно с браузером, потому что теперь моя машина не видит мой fs модуль возвращает текст fs.createReadStream не является функцией как на снимке экрана: enter image description here

любой совет для этого, укажите заранее.

+0

Ответить обновлено. – dNitro

ответ

2

Browserify не позволяет переменным загрязнять глобальную область. Если вы хотите использовать его, вы должны прикрепить его к глобальным.

Здесь, если вы хотите UploadModelBySketchfabdataApi функцию, доступную для window, вы можете прикрепить его:

window.UploadModelBySketchfabdataApi = function (token, idinputfile) { ... 


Update:

Browserify не поддерживает модуль фс. См. compatibility list.

Вы можете использовать browserify-fs, который использует level-filesystem. они утверждают, что:

Все методы async в модуле fs поддерживаются и хорошо протестированы (включая ссылки!)

Но следить за поддержку браузера:

enter image description here

Установка:

npm install browserify-fs 

Использование:

Непосредственно:

var fs = require('browserify-fs'); 

Или использовать регулярные fs модуль и во время расслоения заменить его browserify-fs:

var fs = require('fs'); 

// CLI 
browserify main.js -r fs:browserify-fs -o bundle.js 

Или использовать обычный fs модуль и использовать package.jsonbrowser filed заменить его:

var fs = require('fs'); 

// package.json 
"browser": { 
    "fs": "browserify-fs" 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^