Условно импортировать модули npm?


Структура моего проекта выглядит следующим образом:

- workspace
  - customPackage
    - customIndex.js
  - myProject
    - index.js
  - myProject2
    - index.js

В dev я хочу импортировать пакет из моего локального рабочего пространства следующим образом:

//index.js
import something from '../customePackage/customIndex.js'

Где, как и в производстве, мне нужен импорт для работы с модулями npm, такими как:

//index.js
import something from 'customPackage';

Цель состоит в том, чтобы иметь возможность использовать локальные изменения в пакете(без прохождения цикла фиксации). Наконец, после тестирования пакет может быть выдвинут и использован нормально через пакет npm.

Как это сделать в эффективном путь без необходимости вносить изменения в код каждый раз?

2 2

2 ответа:

Вы можете использовать Resolve#alias с Webpack:

resolve: {
    alias: {
        "customPackage": process.env.NODE_ENV === "production" ? 
            "customPackage" :
            path.resolve(__dirname, "../customePackage/customIndex.js")
    }
}

Тогда в вашем источнике вам нужно только сделать:

import something from 'customPackage';

И он укажет на правильный пакет. Очевидно, что вам нужно установить переменную окружения NODE_ENV или изменить ее в зависимости от среды сборки.

Если вы уже используете webpack, вы можете сделать две разные точки входа:

entry: {
    bundle: './Scripts/index.tsx',
    bundle2: './Scripts/index2.tsx'
},
output: {
    publicPath: "/js/",
    path: path.join(__dirname, '/wwwroot/js/'),
    filename: '[name].js'
},

Затем в index вы импортируете основной модуль, а в index2 - тестовый модуль. Таким образом, у вас будут разные файлы пакетов bundle.js и bundle2.js.