4

私はgrunt-requirejsを使用しており、アプリの構造は次のようになります。

site/
  dev/
    index.html
    config.coffee
    app.coffee
    etc.
  srv_dev/
    index.html
    config.js
    app.js
    etc.
  dist/
  node_modules/
  Gruntfile.coffee

ファイルを実行grunt devすると、他のタスクの中でコーヒーから js にコンパイルされ、dev/ から srv_dev/ にコピーされ、そこから提供されます。

私のgrunt distタスクは、アプリのすべての主要な依存関係をコンパイル/結合する必要がありますが、後で実行するための呼び出しをdev許可する必要があるrequirejsタスクを実行します。基本的に、ユーザーがリンクをクリックするまでロードされない単一ページアプリの一部があり、それが起動して呼び出されます。require(somevar)definerequrire()define()

私の現在の問題は非常に基本的なようです...次のようにrequirejs gruntタスクを設定しました:

requirejs:
  options:
    baseUrl: './'
    mainConfigFile: 'srv_dev/config.js'
  dist:
    options:
      out: 'dist/script.js'

これはスローしますError: Error: Missing either a "name", "include" or "modules" option

ほとんどのオプティマイザ ドキュメントとサンプル ビルド ファイルを読みましたが、このエラーで何が起こっているのかわかりません。このプロジェクトのtkellen はalmond.js の name オプションを使用していますが、私はそれをしたくないと思います。ビルド ファイルの例には、「モジュール名を指定するだけで、そのモジュールがその依存関係をすべて含むビルド ファイルに変換されることを意味します」と記載されています。それが私の次の試みでした:

requirejs:
  options:
    baseUrl: './'
    name: 'srv_dev/config.js'
  dist:
    options:
      out: 'dist/script.js'

これで私は得るError: ENOENT, no such file or directory >> '/Users/user/Desktop/project/site/app.js'

そのため、config.js は見つかりますが、require.js 構成の baseUrl を使用しているため、構成にリストされているパスを見つけることができません。

また、requirejs タスク構成で「./srv_dev」の baseUrl を指定すると、config.js ファイルが見つかりません。これをうまく機能させるために、さまざまな方法を試しました。gruntfile は config.js ファイルと同じディレクトリにある必要があると思いますが、それは私のプロジェクトの設定方法ではありません。

ありがとう!

ここに私のconfig.coffeeファイルの全文があります

config =

  baseUrl: './'

  paths:
    # require plugins
    text             : '/components/requirejs-plugins/lib/text'
    json             : '/components/requirejs-plugins/src/json'

    # lib
    jquery           : '/components/jquery/jquery'
    bootstrap        : '/components/bootstrap/dist/js/bootstrap'
    lodash           : '/components/lodash/dist/lodash'
    backbone         : '/components/backbone/backbone'
    marionette       : '/components/marionette/lib/backbone.marionette.min'
    handlebars       : '/components/handlebars/handlebars'
    prism            : '/components/customPrism/prism'
    coffeescript     : '/components/coffee-script/extras/coffee-script'

    # app
    app              : '/app/app'
    appSettings      : '/app/appSettings'
    AppController    : '/app/AppController'
    AppRouter        : '/app/AppRouter'

    postMasterRecord : '/posts/postMasterRecord'

    util             : '/scripts/util'
    templates        : '/templates'
    handlebarsHelpers: '/scripts/handlebarsHelpers'

  shim:
    # lib
    bootstrap:
      deps: ['jquery']
    backbone:
      deps: ['lodash', 'jquery']
      exports: 'Backbone'
    marionette:
      deps: ['backbone', 'lodash', 'jquery']
      exports : 'Marionette'
    handlebars:
      exports: 'Handlebars'
    templates:
      deps: ['handlebars']

    # app
    app:
      deps: [
        'marionette'
        'bootstrap'
        'handlebars'
        'templates'
      ]

  # deps: ['app']

require.config(config)

require(['app'])
4

1 に答える 1

3

mainConfigFileあなたと同じファイルを指定することは完全に受け入れられますname

requirejs:
  options:
    mainConfigFile: 'srv_dev/config.js'
    baseUrl: './srv_dev'
    name: 'config'
    findNestedDependencies: true
  dist:
    options:
      out: 'dist/script.js'

mainConfigFiler.js「ここが私のランタイム構成を見つけることができる場所です」と言いnameますが、「ここが私のメインモジュールです」と言っています。一方が他方を暗示するものではありません。

なしmainConfigFile r.jsでは、ランタイム構成が見つかりません。name(またはincludeまたは) がないmodulesと、アプリケーションのエントリ ポイントが何かを認識できません。

findNestedDependencies: trueファイル内r.jsの をフォローするには が必要です。require([app])config.js

于 2014-03-17T19:40:10.917 に答える