0

我有一个项目,它由多个具有以下结构的应用程序组成:

project
  |-node_modules
  |-common
     |-public
       |-js
         |-vendor
           |-almond.js
           |-require.js
           |-underscore.js
           |-backbone.js
  |-app1
     |-public
       |-js
         |-requireConfig.js
         |-main.js
         |-views
           |- ...
         |-models
           |- ...
  |-app2
  Gruntfile.js

我想让我的 requirejs grunt 任务将 js src 编译为每个应用程序的一个输出文件。我有这个为 app2 工作,但它不使用共享代码......但是。我已经为我的 grunt 配置尝试了很多不同的东西,但每次都会遇到不同的错误。

到目前为止,对于requirejs,这是我的gruntfile:

requirejs: {
  app1: {
    options: {
      baseUrl: './',
      mainConfigFile: 'app1/public/js/requireConfig.js',
      include: ['app1/public/js/main'],
      out: 'app1/public/release/main.js',
      name: 'common/public/js/vendor/almond',
      optimize: 'none'
    }
  },
  app2: {...}
},

这是我的requireConfig.js:

require.config({
  paths: {
    jquery: '/common/public/js/vendor/jquery',
    underscore: '/common/public/js/vendor/underscore',
    etc
  }
});

现在,当我尝试运行该任务时,出现错误:

Error: ENOENT, no such file or directory
'/common/public/js/vendor/backbone.js'
In module tree:
   app1/public/js/main

不知道如何解决这个问题。我尝试在我的 requireConfig 中设置一个 baseUrl 但没有真正的运气。

我发现r.js示例构建文件有点令人困惑,我猜我可能以某种方式混淆了 gruntfile 中的配置。

4

1 回答 1

0

我通过做一些稍微不受欢迎的改变来实现这一点。我已经设置了我的服务器,以便 /common/public 服务器该文件夹,但这会影响我的 requirejs 构建。似乎我的 requireConfig 中的路由必须相对于它所在的目录。然后我必须加上前缀:

'../../../common/public'

我不太喜欢,我还必须更改 grunt 配置:

requirejs: {
  app1: {
    options: {
      mainConfigFile: 'app1/public/js/requireConfig.js',
      include: ['main'],
      out: 'app1/public/release/main.js',
      name: '../../../common/public/js/vendor/almond',
      optimize: 'none'
    }
  },
  app2: {...}
},
于 2015-07-21T18:33:45.360 回答