ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – mainConfigFile中的RequireJS Optimizer无法正常工作

2019-06-29 03:29:58  阅读:294  来源: 互联网

标签:javascript coffeescript gruntjs requirejs grunt-contrib-requirejs


我使用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)并定义稍后运行的调用.基本上我的单页应用程序的某些部分在用户点击它的链接之前不会加载,这会触发requrire()和define()调用.

我目前的问题似乎很基本……我已经设置了我的requirejs grunt任务,如下所示:

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

抛出错误:错误:缺少“名称”,“包含”或“模块”选项

我已经阅读了大多数优化器文档以及example build file,并且不明白这个错误发生了什么. this project中的tkellen使用almond.js的name选项 – 但我不认为我想这样做,因为我需要那些lazy – loader require()调用.示例构建文件指出:“仅指定模块名称意味着该模块将转换为包含其所有依赖项的构建文件.”这是我的下一次尝试:

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

有了这个,我得到错误:ENOENT,没有这样的文件或目录>> ‘/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'])

解决方法:

指定与mainConfigFile相同的文件和名称是完全可以接受的:

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

mainConfigFile告诉r.js“这里是你可以找到我的运行时配置的地方”,而名字则说“这里是我的主要模块”.一个并不意味着另一个.

没有mainConfigFile,r.js无法找到您的运行时配置.没有名称(或包含或模块),它无法知道您的应用程序的入口点.

findNestedDependencies:如果r.js必须遵循config.js文件中的require([app]).

标签:javascript,coffeescript,gruntjs,requirejs,grunt-contrib-requirejs
来源: https://codeday.me/bug/20190629/1322589.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有