0

製品版で amd の必要性を完全に取り除くために、requirejs と AMDClean を使用してプロジェクトを構築しようとしています。ファイルをまとめるためにrequirejsオプティマイザーを取得することはできますが、amdcleanを使用してrequire/defineを削除することはできません。これが私のrequirejsコードです(coffeescriptを使用してうなり声で書かれています):

requirejs:
      compile:
        options:
          baseUrl: './client'
          mainConfigFile: "client/main.js"
          name: 'main'
          out: 'build/main.js'

ここで、client/main.js はアプリケーションへのエントリ ポイントです。script タグを使用してこのファイルを呼び出すことができます。

<script src="client/vendor/require.js" data-main="build/main.js"></script>

これは、amdclean を使用した grunt の requirejs タスクです。

fs = require 'fs'
amdclean = require 'amdclean'

module.exports = (grunt) ->
  'use strict'
  grunt.initConfig(

    #Read Package.json
    pkg: grunt.file.readJSON('package.json')

    #Build task
    requirejs:
      compile:
        options:
          baseUrl: './client'
          mainConfigFile: "client/main.js"
          name: 'main'
          out: 'build/main.js'
          onModuleBundleComplete: (data) ->
            outputFile = data.path
            fs.writeFileSync(outputFile, amdclean.clean(
              'filePath': 'client/main.js'
              'globalModules': []
              'wrap':
                'start': '(function(){\n',
                'end': '\n}());'
            ))

このタグを使用してこのファイルを呼び出すことができると思います:

<script src="build/main.js"></script>

これは起こっていません。これはmodels_MenuItem is not defined、モジュールが正しい順序でロードされていない場合に通常発生するエラーです。requirejs オプティマイザーでビルドされたファイルと、ビルド前の元の JavaScript は正常に動作します。amdclean の構成を修正するか、問題が実際にどこにあるのかを特定するのを手伝ってください。

4

1 に答える 1

0

filePathAMDclean オプションを正しく設定してください。

'filePath': outputFile

他にもいくつかの理由が考えられます。

Require.js のskipModuleInsertionオプションをtrueに設定してください。デフォルトでは、Require.js は .xml でdefine()ラップされていないファイルのラッパーを作成しますdefine()。これにより、AMDclean で問題が発生する可能性があります。

AMDclean でビルドするときは、縮小されたファイルを指していないことを確認してください。これは間違いなく問題を引き起こします。

于 2014-06-06T20:42:11.783 に答える