0

grunt-contrib-requirejsタスクを実行しようとしています。
一般的にRequireJSに不慣れで、オプティマイザ/r.jsを使用したことがないため、これを機能させる方法が本当に混乱しています。

まず、次のような単純なディレクトリ構造を設定しました。

root
├── js
│   ├── helper
│   │   ├── a.js
│   │   ├── b.js
│   │   └── d-dep.js
│   └── main.js
├── node_modules
│   └── [dependencies from package.json]
├── Gruntfile.js
└── package.json

ブラウザーでテストしたところ、すべての依存関係が正しく読み込まれています。

私のグラントファイル:

module.exports = function(grunt) {
  grunt.config.init({
    requirejs: {
      options: {
        baseUrl: 'js/',
        mainConfigFile: 'js/main.js',
        dir: 'target/',
        keepBuildDir: true
      }
    }
  });

  require('load-grunt-tasks')(grunt);
}

main.js:

require(["helper/a", "helper/b"], function(util) {
  console.log('main.js loaded');
});

a.js

console.log('a.js loaded');

b.js

define(['js/helper/b-dep.js'], function(bdep) {
  console.log('b.js loaded');
});

b-dep.js

console.log('b.js dependency loaded');

を実行するgrunt requirejsと、Done, without errors.メッセージが表示されますが、最適化されたファイルが表示されません。エラーは Gruntfile にあり、おそらくパスであると推測しています。

印象に残っていることはありますか?と書かれているのに、何も最適化されていないのはなぜDone, without errors.ですか?

4

2 に答える 2

1

何かを最適化するように指示していないようです。nameメインモジュールが何であるかを伝えるオプションを設定する必要があります。また、grunt に渡す構成に 1 つのレベルの構成がありません。optionsオブジェクトは、次のようなより具体的なターゲット内にある必要がありcompileます。

requirejs: {
  compile: { // <<== nest the options in this.
    options: {
      baseUrl: 'js/',
      mainConfigFile: 'js/main.js',
      name : 'main', // <<=== add this
      dir: 'target/',
      keepBuildDir: true
    }
  }
}

を設定するmainConfigFileだけでは不十分です。なぜなら、これはオプティマイザに実行時設定をどこから取得すべきかを伝えるだけだからです。ファイルがモジュールであることをオプティマイザに通知しません。.js拡張子nameがないことはエラーではないことに注意してください。拡張機能を必要とする特定の理由がない限り、モジュール名に拡張機能を使用することは避けてください。とnameは相対的なbaseUrlので、そうでは'main'ない'js/main'のです。

于 2015-01-23T23:59:09.430 に答える