【问题标题】:Require statement error on importing modules from TestRunner.html从 TestRunner.html 导入模块时需要语句错误
【发布时间】:2017-04-21 09:30:50
【问题描述】:

我是摩卡的新手。当我从terminal 运行时,我的以下脚本有效。但是,当我从 testrunner.html 运行时没有结果。检查时,似乎是因为var xl = require('./excel');。如果我评论这个声明,它会起作用。我怎样才能使这项工作?我需要为我的脚本导入自定义模块。

更新了 test.js 以合并 RequireJS

  • 发布更改:适用于浏览器和终端

module1.js

if(typeof define !== 'undefined')
{
    define([], function() {
        return {
            get: function() {
                return get();
            }
        };
    });
}
else if(typeof exports !== 'undefined') {
    module.exports = {
        get: function(){
            return get();
        }    
    };    
}

function get(){
    return "hello node world";
}

test.js

if(typeof requirejs == 'undefined') {var requirejs = require('requirejs');}
if(typeof chai == 'undefined') {var chai = require('chai');}
requirejs.config({
    baseUrl: '.',
    paths: {   

    },
    nodeRequire: require
});

describe("RequireTest()", function(){    
    var module1;
    before(function(done){
        requirejs(['./module1'], 
            function(_module) {                    
                console.log('before fired');
                module1 = _module;  
                if(typeof requirejs == 'undefined') {mocha.run();}
                done();             
        });
    });        
    it('test case: ', function(){
        console.log(module1.get());
        chai.expect(1+1).to.equal(2);
    });
});

testrunner.html (sn-p)

<div id="mocha"></div>
<script src="../node_modules/mocha/mocha.js"></script>
<script src="../node_modules/chai/chai.js"></script>
<script src="../node_modules/requirejs/require.js"></script>
<script>mocha.setup('bdd')</script>

<script src="./test.js"></script>

<script>mocha.run();</script>

【问题讨论】:

    标签: mocha.js


    【解决方案1】:

    当您在命令行运行 Mocha 时,您使用的是 Node.js,它提供了require

    当你在浏览器中运行它时,没有浏览器提供的require。您需要在运行时使用模块加载器,例如 RequireJS 或 SystemJS。或者,您需要使用像 Webpack 或 Browserify 这样的打包程序来预先处理您的代码并将其转换为包含您所有代码的单个包。

    请注意,您使用的第三方模块是否可以加载到浏览器中,这是您必须逐个模块做出的决定。例如,如果您使用的模块使用 Node 的 child_process 模块来生成一个新进程,那么您将无法仅在浏览器中使用该模块,因为浏览器不提供 child_process

    【讨论】:

    • 谢谢。根据我对阅读材料的理解,我已将原始问题更新为使用RequireJS。而且,我仍然试图让它在浏览器上运行。请指教。
    • 你好@Louis,我刚刚更新了原来的test.js 以使用RequireJS。它从终端运行。但是,不是通过浏览器。缺失的差距可能是什么?提前致谢。
    • 浏览器出现什么错误?请记住,在我的回答中,我提到某些节点模块不会在浏览器中运行。那可能是你的问题。回顾你的另一个问题,在我看来你想从文件系统中读取。您不能在浏览器中执行此操作(列表中不是从 Node 到浏览器代码的直接转换:浏览器不提供类似 fs 的任何内容。)
    • 这是我在浏览器开发工具上得到的。 require.js:168 Uncaught Error: Module name "requirejs" has not been loaded yet for context: _. Use require([])
    • 你好@Louis,需要你的帮助。请参考原始问题中的更新脚本。基于http://stackoverflow.com/questions/38355903 进行的更新。 Current result is: 它在终端上工作。但不适用于浏览器。也没有显示错误。
    猜你喜欢
    • 2012-06-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多