【问题标题】:Karma: Cannot find module in relative path业力:在相对路径中找不到模块
【发布时间】:2017-01-05 15:56:27
【问题描述】:

我很难让 Karma 不加载特定文件。我是 Karma 的初学者,但是我花了一整天时间研究文档并寻找类似的问题,但没有成功。

启动 karma 进程时,加载配置文件时会失败。这是错误:

Chrome 52.0.2743 (Linux 0.0.0) ERROR
Uncaught Error: Cannot find module './development'
at /tmp/node_modules/browser-pack/_prelude.js:1:0 <- /tmp/7b47eeb55cec3f8cc510b5cd637c570a.browserify:1

我不怀疑文件本身就是问题所在。我的猜测是问题在于“要求”行动。该文件可能是执行期间第一个“必需”的文件。所以 Browserify 也可能有罪。

文件树:

.
├── karma.conf.js
├── LICENSE
├── package.json
├── README.md
└── src
    ├── config
    │   ├── base.js
    │   ├── development.js
    │   ├── index.js
    │   └── production.js
    ├── controllers
    │   ├── authentication.js
    │   └── __test__
    │       └── authentication.test.js
    ├── modules
    │   └── auth
    │       ├── builder.js
    │       └── __test__
    │           └── mocks
    │               └── builder.mock.js
    ├── router.js
    └── server.js

karma.conf.js

'use strict';
module.exports = function(config) {

  config.set({

    basePath: '',
    frameworks: ['mocha', 'sinon-chai', 'browserify'],
    files: [
      'src/**/*.test.js'
    ],
    exclude: [
    ],
    preprocessors: {
      'src/**/*.test.js': ['browserify']
    },
    reporters: ['progress', 'mocha'],
    browserify: {
      debug: true,
      transform: [
        ['babelify',{
          presets: ['es2015'],
        }]
      ]
    },
    port: 9876,
    colors: true,
    logLevel: config.LOG_DEBUG,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    concurrency: Infinity
  })
}

在 src/config/index.js 中失败

'use strict';

const env = process.env.NODE_ENV || 'development';
const config = require('./' + env);

module.exports = config;

为了给大家一个重现它的方法,我构建了一个小节点应用程序: https://github.com/slecorvaisier/karma-starterkit

开始于:

 npm run test

版本:node-v:v6.2.0 npm -v:3.8.9

非常感谢您的任何帮助。

【问题讨论】:

    标签: javascript node.js unit-testing karma-runner browserify


    【解决方案1】:

    我认为问题出在您对变量的 require 使用中,browserify 不支持。

    而不是写:

    const env = process.env.NODE_ENV || 'development';
    const config = require('./' + env);
    

    尝试:

    const config = process.env.NODE_ENV === "production" ? require('./production') : require('./development');
    

    规则是你不能在 require 中使用任何变量。

    另见Why can I not use a variable as parameter in the require() function of node.js (browserify)?

    【讨论】:

    • 我解决了我的问题,并在你的问题之后 46 秒发布了我自己的答案,所以我没有看到它。但是,当您确定时,我会接受您的回答。感谢您的帮助!
    【解决方案2】:

    解决办法如下:

    因为 Browserify 不执行代码本身,所以 'env' 值永远不会被替换。 见:https://github.com/substack/node-browserify/issues/377

    我的解决方法是将配置文件修改为以下(src/config/index.js): '使用严格';

    const env = process.env.NODE_ENV || 'development';
    let config = require('./development');
    
    if (env === 'production') config = require('./production');
    
    module.exports = config;
    

    这不是最好的解决方案,因为我必须“列出”所有环境,但测试现在可以正常工作。对我来说,一个明确的解决方法是打开 webpack 以更正确地处理这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-26
      • 2014-06-26
      • 2015-07-24
      • 2022-11-07
      • 2018-08-24
      • 1970-01-01
      • 2013-10-12
      • 2018-11-06
      相关资源
      最近更新 更多