业力:无法在相对路径中找到模块

时间:2016-08-29 14:56:45

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

我很难与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

我不怀疑该文件本身就是问题。我的猜测是,这个问题围绕着“需要”这个问题。行动。这个文件可能是第一个要求的文件&#39;在执行期间。所以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

非常感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

我认为问题来自于您对变量的使用,这在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)?

答案 1 :(得分:0)

以下是解决方案:

由于Browserify不执行代码本身,'env'值永远不会被替换。 请参阅:https://github.com/substack/node-browserify/issues/377

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

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

if (env === 'production') config = require('./production');

module.exports = config;

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