业力:在相对路径中找不到模块
Karma: Cannot find module in relative path
我很难接受 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
我不怀疑是文件本身的问题。我的猜测是问题出在 'require' 操作周围。该文件可能是执行期间第一个 'required' 的文件。所以 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;
为了给大家一个复现的方法,我搭建了一个小node应用:
https://github.com/slecorvaisier/karma-starterkit
开始于:
npm run test
版本:node-v:v6.2.0 npm -v:3.8.9
非常感谢您的帮助。
我认为问题出在你使用 require with variables,这在 browserify 中是不支持的。
而不是写:
const env = process.env.NODE_ENV || 'development';
const config = require('./' + env);
尝试:
const config = process.env.NODE_ENV === "production" ? require('./production') : require('./development');
规则是你不能在 require 中使用任何变量。
另见
解决方法如下:
由于 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;
这不是最佳解决方案,因为我必须 'list' 所有环境,但测试现在可以正常工作。对我来说,一个明确的解决办法是打开 webpack 以更正确地处理这种情况。
我很难接受 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
我不怀疑是文件本身的问题。我的猜测是问题出在 'require' 操作周围。该文件可能是执行期间第一个 'required' 的文件。所以 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;
为了给大家一个复现的方法,我搭建了一个小node应用: https://github.com/slecorvaisier/karma-starterkit
开始于:
npm run test
版本:node-v:v6.2.0 npm -v:3.8.9
非常感谢您的帮助。
我认为问题出在你使用 require with variables,这在 browserify 中是不支持的。
而不是写:
const env = process.env.NODE_ENV || 'development';
const config = require('./' + env);
尝试:
const config = process.env.NODE_ENV === "production" ? require('./production') : require('./development');
规则是你不能在 require 中使用任何变量。
另见
解决方法如下:
由于 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;
这不是最佳解决方案,因为我必须 'list' 所有环境,但测试现在可以正常工作。对我来说,一个明确的解决办法是打开 webpack 以更正确地处理这种情况。