2014-12-26 35 views
11

这是我做节点的第一天,我在尝试捆绑某些js文件时遇到了一些问题。当尝试捆绑许多js文件时,Browserify找不到模块

MyFolder 
|-- app (folder) 
| |-- Collections (contains: movies.js) 
| |-- Models (contains: movie.js) 
| |-- node_modules 
|-- main.js 
|-- node_modules (folder)  
|-- static (folder) 

这是JS文件我想压缩成静态内容/ bundle.js

// app/models/movie.js 
var Backbone = require("backbone"); 
var Movie = Backbone.Model.extend({ 
    defaults: { 
    title: "default", 
    year: 0, 
    description: "empty", 
    selected: false 
    } 
}); 
module.exports = Movie; 

// app/collections/movies.js 
var Backbone = require("backbone"); 
var Movie = require('models/movie'); 
var Movies = Backbone.Collection.extend({ 
     model: Movie 
}); 
module.exports = Movies; 

当我运行browserify -r ./app/main:app > static/bundle.js文件bundle.js与从应用程序/主脚本创建。 JS。它按预期工作。

但是当我运行browserify -r ./app/collections/movies.js:movies \ -r ./app/models/movie.js:movie > static/bundle.js,它会创建一个空bundle.js并显示出这一点:

Error: Cannot find module '/Users/MyFolder/app/models/movie.js:movie' from '/Users/MyFolder' 

我的文件夹app/node_modules是同步与ln -sf ../models .ln -sf ../collections .

问题1:任何暗示我什么做错了吗?
问题2:如果static/bundle.js存在。再次运行browserify是否覆盖文件?在我的本地测试中,它不会覆盖,所以我应该每次删除此文件以进行更新?

回答

7

对于人来自搜索引擎的:

这可能是你使用的是Mac,你有没有在需要文件时使用正确的大小写。

这是在Mac相当于:

require('./someFile'); 
require('./somefile'); 

但不是在CentOS的例如。

+2

谢谢你。这就是为什么用错误的大写字母导入软件包的原因是在我的OS X开发机器上,而不是在我的Linux服务器上。 – SamHH

0

如果您使用调试器并进入require调用,您会发现自己内部有一些缩小的代码(通常是)。

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require== ... 

转到您的控制台和检查t[o][1]

这将显示你的模块正确的路径列表。

Object { 
    '<module name>' : <id> 
    ... 
} 

如果变得太混乱暂时未缩小率先在你的编译bundle.js文件行(我用alt-cmd-l在PhpStorm),然后再试一次。