web-dev-qa-db-ja.com

多くのjsファイルをバンドルしようとすると、Browserifyがモジュールを見つけられない

これはノードを実行する最初の日です。いくつかの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を再度実行すると、ファイルが上書きされますか?私のローカルテストでは上書きされないので、更新するたびにこのファイルを削除する必要がありますか?

14

パスに./を追加することを検討してください:

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

参照: browserifyを使用してバックボーンアプリをバンドルする方法

26
cheshireoctopus

検索エンジンから来た人のために:

Macを使用していて、ファイルが必要なときに大文字と小文字を正しく使用していない可能性があります。

これはMacでは同等です。

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

しかし、たとえばcentOではありません。

9
Sumit Kushwaha

デバッガーを使用して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を使用します)。もう一度やり直してください。

0
Henry