2017-03-08 33 views
0

時,我不能讓Navigo (npm package)與Browserify和咕嘟咕嘟NAVIGO沒有定義使用Browserify與一飲而盡

我的文件結構工作(僅包括相關的東西)我gulpfile

-index.html 
-build 
    -js 
     -modules.js 
     -routing.js 
-js 
    -modules.js 

我的包的任務。使用browserify JS把能夠使用在NAVIGO我的實際routing.js文件

gulp.task('bundlemods', function() { 
    var bundleMods = browserify('./js/modules.js') 
    .bundle() 
    .on('error', console.error) 
    .pipe(source('modules.js')) 
    .pipe(gulp.dest('./build/js')); 
}); 

,輸出the following modules.js file

然後在我的routing.js我只是想用NAVIGO如下:

function initRouting() { 
    var rootUrl = null; 
    var useHash = false; 
    var router = new Navigo(rootUrl, useHash); 

    router.on(function() { 
     runHome(); 
    }) 
    .resolve(); 
} 

然而,這會產生錯誤Uncaught ReferenceError: Navigo is not defined

而且這是怎麼了我的index.html文件長相(相關零件再次)

<!doctype html> 
<html> 
<head> 
/* stuff */ 
</head> 
<body> 
    <main> 
     /* stuff */ 
    </main> 
    <script src="build/js/modules.js"></script> 
    <script src="build/js/routing.js"></script> 
    /* other scripts */ 
</body> 
</html> 

它是什麼原因仍未定義?使用Browserify生成我的模塊文件後,如何真正使用Navigo?它與全球範圍或我錯過的其他東西有關嗎?

+0

發表您的回購或什麼的,好像你不'requiring'包以正確的方式 –

+0

好像需要是正確的,但我只是把事情搞糟了由不包括它在全球範圍內。 Eeeeeeheheh ... – Clanket

回答

1

當然browserify防止變量在全球範圍內泄漏。如果你想擁有它gloabally可你應該明確地將其連接到全球範圍:

Navigo = require('navigo'); 

不使用var鍵將附加NAVIGO VAR全球範圍內,當你browserify它,你的世界將是窗口 Navigo可以在任何地方使用。

如果你不想污染全球範圍內,那麼你可以只需要它在routing.js

var Navigo = require('navigo'); 
function initRouting() { 
    var rootUrl = null; 
    var useHash = false; 
    var router = new Navigo(rootUrl, useHash); 

    router.on(function() { 
     runHome(); 
    }) 
    .resolve(); 
} 

然後browserify這個文件來代替。

+1

你,我親愛的先生,是我的救命恩人。哇,我不得不相處的一切工作,我錯過了這麼簡單的東西的方式這麼多的問題。非常感謝!還令人驚訝的答案,解釋,而不只是猛推的答案在我的臉上:d – Clanket

+0

@Clanket,很高興它幫助。 – dNitro