2017-03-08 64 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