Webpack (babel-loader) не разрешает вложенную зависимость - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь настроить среду тестирования инструментов для файлов в 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.

Вот мой конфиг веб-пакета:

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 = {};
});

Я сейчас пытаюсь собрать с помощью веб-пакета, я могу запускать тесты безлюбые зависимости для 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, но больше не использует псевдоним Iесть настройка в моем конфиге webpack.Я знаю, что псевдоним должен работать, так как я могу загрузить service/Constants в моем тесте.Я полагаю, что это немного странно, так как я выхожу за пределы своего проекта webpack в одноуровневую директорию, пытаясь получить исходный код для тестирования, но разве это не должно работать?Что мне здесь не хватает?

Я использую требуемый стиль (const dep = require('dep')) для импорта в исходный код, в отличие от того, как я импортирую файлы в своем тесте, но когда я переписываю свой тестфайл, чтобы соответствовать, как исходные файлы, я получаю то же самое поведение, поэтому я не думаю, что это должно иметь значение.

...