gpt4 book ai didi

javascript - grunt requirejs 忽略来 self 的 mainConfigFile 的路径

转载 作者:数据小太阳 更新时间:2023-10-29 04:48:02 26 4
gpt4 key购买 nike

项目介绍

我的项目是单页店面。该项目有多个模块,每个模块包含一组controller.js、view.js和model.js文件,以及一个template.html文件。并使用 requirejs 来管理依赖。

问题陈述

我想使用 mainConfigFile 提供指向 grunt-requirejs 中引用模块的路径。我的 mainConfigFile 的 require.config 的一部分存储在单独的文件 (base.dependency.config) 中,并且 require.config.paths 在运行时通过下划线拼凑在一起。

base.dependency.config

config = {
baseDependencyConfig: {
paths: { ... }
shim: { ... }
}
}

ma​​in.js

var dependencies = config.baseDependencyConfig;
var basePaths = config.baseDependencyConfig.paths;
var extensionPaths = {
// extra sets of paths
};

// combine base paths and extension paths at runtime using underscore
var dependencyPaths = _.extend(basePaths, extensionPaths);

dependencies.paths = dependencyPaths;
require.config(dependencies);

// application startup
require(['app', 'eventbus']) {
// code
}

错误

但是,grunt requirejs 忽略了 mainConfigFile,grunt requirejs 试图在 root 下找到“app.js”,而实际上,“app”在 require.config 路径下定义为

'app': 'modules/base/app/base.app.controller'

我的 grunt 文件:

module.exports = function (grunt) {
grunt.initConfig({
// ... other plugin config
requirejs: {
options: {
baseUrl: 'public',
// the paths for the named modules such as 'app' are defined
// in main.js under require.config paths
name: 'main',
include: [
'app',
'cart',
'category'
],
out: 'public/build/app-optimized.js',
mainConfigFile: 'public/main.js',
findNestedDependencies: true,
optimizeCss: 'none',
cssImportIgnore: 'style/style.css, style/mocha.css',
}
}
})
}

我的文件结构

public
|--modules/
| |--base/
| | |--cart
| | |--category
| | |--category.controller.js
| | |--category.view.js
| | |--category.model.js
| | └-category.template.html
| |
| └--extension/
|
|--style/
|--image/
|--main.js <-- main config file
|--other .js files
  • mainConfigFile、main.js 以及其他一些应用程序启动 js 文件位于根目录
  • 大部分应用程序文件位于模块文件夹中
  • 每个模块文件夹包含它的 Controller 、 View 和模型 js 文件,以及一个 template.html 文件

编辑

gruntFile 之前可以使用不同的 mainConfigFile (main.js) 设置:

require.config({
paths: {...}
shim: {...}
})

// application startup
require(['app', 'eventbus']) {
// code
}

最佳答案

r.js 使用 Esprima as Javascript parser从指定的 mainConfigFile 中提取配置对象。它仅在代码中查找某些签名。

看看

我创建了一个补丁,让它意识到识别

requirejs.config(_VariableToExport = { ... });

这是有限的,Javascript 解析器方法使得 r.js 能够提取由函数创建的配置(如在您的代码中)等变得非常复杂。此补丁尚未提交给项目。我还在与官僚主义作斗争。

我认为目前唯一可行的解​​决方法是

  • 不使用mainConfigFile
  • 将配置导出为 NodeJS 模块
  • 在 Node (Grunt) 中需要 main.js/config.js
  • 将对象作为值传递给配置属性或方法

请参阅我对此问题的评论 scribble .

这种方法在我正在从事的另一个稍旧的项目中得到了证明。

与 r.js 2.1.11 相关。

关于javascript - grunt requirejs 忽略来 self 的 mainConfigFile 的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19415369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com