NodeJS 试图捆绑多个js文件时,Browserify找不到模块

cnh2zyt3  于 2023-01-12  发布在  Node.js
关注(0)|答案(6)|浏览(142)

这是我第一天做节点,我有一些问题,试图捆绑一些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是否会覆盖该文件?在我的本地测试中,它不会覆盖,所以我应该在每次更新时删除该文件吗?

kq0g1dla

kq0g1dla1#

可以考虑将./添加到路径中:

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

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

a1o7rhls

a1o7rhls2#

对于来自搜索引擎的人:
这可能是因为您使用的是Mac,在需要该文件时没有使用正确的大小写。
这在mac中是等效的:

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

但不是以百分为单位。

kmb7vmvb

kmb7vmvb3#

如果使用调试器并单步执行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),然后重试。

igetnqfo

igetnqfo4#

我也遇到过同样的错误,在我的例子中,这是因为如果文件没有直接在require中指定,Browserify就不会检测到它。
示例:
变更:

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

收件人:

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

wfsdck305#

我最近也遇到了同样的错误。我正在使用Gulp 4运行Browserify。
问题是我正在重新组织我的项目文件夹架构,我没有清空我捆绑的.js文件的目标(dist)文件夹。在我清空那个文件夹(在我的例子中它被称为assets)并运行Browserfy之后,它又正常工作了。

pu82cl6c

pu82cl6c6#

就我而言,我取代了

const router = require(path.join(__dirname, 'router'))

const router = require('./router')

它的工作。似乎Browserify不支持通过节点“路径”模块访问本地文件

相关问题