Webpack(babel-loader)无法解决嵌套依赖性

时间:2018-10-03 17:08:24

标签: webpack babel-loader

我正在尝试为repo

中的文件设置检测测试环境

这是我正在使用的目录结构:

code/
├── repo/
│   └── public/
│       └── service/
│           ├── Constants.js
│           └── HelloWorld.js
│
└── instrumentation/
    ├── tests/
    │   ├── index.js
    │   └── HelloWorld.test.js
    │
    ├── package.json
    └── webpack.config.js

我希望能够在code/instrumentation/tests中编写测试,我的index.js文件将加载tests目录中与*.test.js匹配的每个文件。

这是我的webpack配置:

const path = require('path');

module.exports = {
    mode: 'development',

    entry: 'mocha-loader!./tests/index.js',

    output: {
        filename: 'main.js',
        path: path.resolve(__dirname, 'dist')
    },

    module: {
        rules: [{
            test: /\.js$/,
            exclude: /(node_modules)/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ['@babel/preset-env']
                }
            }
        }, {
            test: /(\.css|\.less)$/,
            exclude: /build/,
            use: {
                loader: 'null-loader',
            }
        }, {
            test: /(\.jpg|\.jpeg|\.png|\.gif)$/,
            use: {
                loader: 'null-loader'
            }
        }]
    },

    resolve: {
        alias: {
            repo: '../../repo',
            service: 'repo/public/service'
        }
    },

    devtool: 'inline-source-map',

    node: {fs: 'empty'}
};

Constants.js

define(function (require, exports, module) {
    module.exports = {
        ONE: 'one',
        TWO: 'two'
    };
});

HelloWorld.js

define(function (require, exports, module) {
    const Constants = require('public/service/Constants');

    console.log(Constants.ONE);

    module.exports = {};
});

我现在正在尝试使用webpack进行构建,我可以在没有HelloWorld.test.js任何依赖的情况下运行测试。我也可以在repo/Constants中很好地导入HelloWorld.test.js,但这就是我想要的工作:

HelloWorld.test.js

import * as chai from 'chai';
const {expect} = chai;
const Constants = require('service/Constants');
const HelloWorld = require('service/HelloWorld');

describe('tes tings', () => {
    it('should work', () => {
        expect(CallingConstants).not.to.equal(null);
        expect(2 + 2).to.equal(4);
    });
});

当我尝试使用Webpack进行构建时,出现以下错误:

ERROR in ../repo/public/service/HelloWorld.js
Module not found: Error: Can't resolve 'public/service/Constants' in '/Users/jman/Documents/code/repo/public/service'
 @ ../repo/public/service/HelloWorld.js 2:18-53
 @ ./tests/life.test.js
 @ ./tests sync .+\.test\.js?$
 @ ./node_modules/babel-loader/lib??ref--4!./tests/index.js
 @ ./node_modules/mocha-loader!./tests/index.js

似乎当webpack加载HelloWorld.js时,它会尝试寻找service/Constants,但不再使用我在webpack配置中设置的别名。我知道别名应该可以正常工作,因为我可以在测试中加载service/Constants。我想这有点麻烦,因为我要从Webpack项目外进入同级目录,试图获取要测试的源代码,但这不行吗?我在这里想念什么?

我使用的是在我的源代码中导入的要求样式(const dep = require('dep')),而不是在测试中导入文件的方式,但是当我重新编写测试文件以匹配源文件的方式时完成后,我会得到相同的行为,所以我认为这不会有所作为。

0 个答案:

没有答案