【问题标题】:Browserify Cannot find module when trying to bundle many js filesBrowserify在尝试捆绑许多js文件时找不到模块
【发布时间】:2014-12-26 03:31:25
【问题描述】:

这是我做节点的第一天,我在尝试捆绑一些 js 文件时遇到了一些问题。

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

这是我要压缩成static/bundle.js的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 是使用 app/main.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_modulesln -sf ../models .ln -sf ../collections . 同步

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

【问题讨论】:

    标签: node.js ssh browserify


    【解决方案1】:

    可能会考虑将./ 添加到您的路径中:

    var Movie = require('./models/movie');
    

    见:How to use browserify to bundle a backbone app?

    【讨论】:

    • 是的!这解决了我的问题,我使用 Bable 转换了我的 ES6 程序,我认为它会做到这一点
    • 在网上花了半个小时终于找到了我的问题的正确答案......真的感谢伙伴。
    【解决方案2】:

    对于来自搜索引擎的人:

    可能是您使用的是 mac 并且在需要文件时没有使用正确的大小写。

    这在mac中是等价的:

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

    但不是在 centOs 中。

    【讨论】:

    • 谢谢你。这就是为什么在我的 OS X 开发机器上导入一个错误的大写字母的包,但在我的 Linux 服务器上却不行。
    【解决方案3】:

    如果您使用调试器并进入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 文件中的第一行(我在 PhpStorm 中使用 alt-cmd-l)并重试。

    【讨论】:

      【解决方案4】:

      我有同样的错误。在我的情况下,这是因为如果文件没有在 require 中直接指定,Browserify 不会检测到该文件。

      例子:

      变化:

      var f = 'filename'
      var handler = require('./' + f + '.js'); --> this will generate an error
      

      收件人:

      var handler = require('./filename.js');
      

      【讨论】:

        【解决方案5】:

        我最近遇到了同样的错误。我正在使用 Gulp 4 运行 Browserify。

        问题是我正在重新组织我的项目文件夹架构,并且我没有清空捆绑的 .js 文件的目标 (dist) 文件夹。在我清空该文件夹(在我的情况下,它被称为 assets)并运行 Browserfy 后,它又可以正常工作了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多