RequireJs优化器缩小为一个文件,但不';Don’不要启动主电源

RequireJs优化器缩小为一个文件,但不';Don’不要启动主电源,requirejs,Requirejs,我有一个简单的requirejs项目,我正试图使用node将其优化为一个文件。 项目结构是这样的 |___index.html | ├───css │ style.css │ └───scripts │ main.js │ ├───lib │ require.js │ underscore.js │ └───modules module1.js modu

我有一个简单的requirejs项目,我正试图使用node将其优化为一个文件。 项目结构是这样的

|___index.html | ├───css │ style.css │ └───scripts │ main.js │ ├───lib │ require.js │ underscore.js │ └───modules module1.js module2.js module3.js 在项目文件之外使用r.js和build.js。我使用节点控制台运行了优化器

node r.js -o build.js
一切正常。将创建输出main-build.js。但是当我换上

<script data-main="scripts/main" src="scripts/lib/require.js"></script>


当我运行索引文件时。没有错误,但没有输出。我期待这样的控制台消息。 它使用原始数据主数据集作为主数据集

//output main started m1 started m2 started..starting m3 from m2 m3 started //输出 主要开始 m1开始 m2开始..从m2开始m3 m3启动 请帮助我找出项目没有运行的原因,并且没有错误:(

//main.js
定义([
“lib/下划线”,
“模块/模块1”,
“模块/模块2”
],
函数(u,模块1,模块2){
log('main start');
var module1=新的module1();
var module2=新的module2();
模块1.start();
module2.start();
});
//模块1.js
定义(['lib/下划线'],
函数{
函数模块1(){
this.start=函数(){
log('m1 start');
};
}
返回模块1;
});
//module2.js
定义(['lib/下划线','modules/module3'],
函数(u,模块3){
函数模块2(){
this.start=函数(){
console.log('m2开始..从m2开始m3');
var module3=新的module3();
模块3.start();
};
}
返回模块2;
});
//模块3
定义([
“下划线”],
函数{
函数模块3(){
this.start=函数(){
console.log(“m3已启动”);
};
}
返回模块3;
});
//index.html
我发现了我的问题。 “main build.js”必须是“main.js”或
在main builded中,模块名称需要从“main”更改为“main builded”。

如果您不能使模块名称(在我们的示例中是portal/main)与文件名(即portal/main.js)相同,那么这里还有两个想法

  • 从startup define()调用中完全删除模块名。这使其成为文档的默认入口点。这里的问题是,优化器根据使用的命令行参数,在使用“和”时不一致

  • 添加类似require([“startup module name”])的内容作为构建文件的最后一行。当加载脚本并调用您喜欢的第一个模块时,这将立即执行。事实证明,这非常容易自动将其添加到构建脚本中,并为我们解决了问题


根据Thupten的解决方案,在main-build.js中自动执行此替换的一种方法是从命令行运行:

之后


正确,我刚刚声明有相同的问题。但这是一个问题,因为如果您将指纹(缓存破坏)添加到文件名中,它将不会加载!我们将使用您的第二个选项。由于模块在生成的文件名中添加了SHA(缓存破坏)后立即停止工作.AMD模块令人惊叹,但Require.JS简直是地狱!
<script data-main="scripts/main-built" src="scripts/lib/require.js"></script>
//output main started m1 started m2 started..starting m3 from m2 m3 started
  //main.js
    define([
        'lib/underscore',
        'modules/module1',
        'modules/module2'
    ],
        function (_, Module1, Module2) {
            console.log('main started');
            var module1 = new Module1();
            var module2 = new Module2();
            module1.start();
            module2.start();
        });


    //module1.js
    define(['lib/underscore'],
        function ( _) {
            function Module1() {
                this.start = function () {
                    console.log('m1 started');

                };
            }

            return Module1;
        });

    //module2.js
    define(['lib/underscore', 'modules/module3'],
        function (_, Module3) {
            function Module2() {
                this.start = function () {
                    console.log('m2 started..starting m3 from m2');

                    var module3 = new Module3();
                    module3.start();

                };
            }

            return Module2;
        });

    //module3
    define([
        'underscore'],
        function (_) {
            function Module3() {
                this.start = function () {
                    console.log('m3 started');
                };
            }

            return Module3;
        });


    //index.html

    <!DOCTYPE html>
    <html>
    <head>
        <link href="css/style.css" rel="stylesheet" type="text/css">
        <title></title>
    </head>

    <body>
    <div id="main"></div>
    <script data-main="scripts/main-built" src="scripts/lib/require.js"></script>
    </body>
    </html>
node r.js -o build.js
sed -i -- 's/define("main/define("main-built/g' main/js/Main.min.js