npm запустить сборку для приложения React, используя неверный путь к источнику index.js

Мой npm run build терпит неудачу с этим:

✖ Building demo

Failed to compile with 1 error.

 ERROR  in multi ./node_modules/nwb/polyfills.js ./demo/src/index.js
Module not found: Error: Can't resolve '/Users/david/git/demoapp/demo/src/index.js' in '/Users/david/git/demoapp'
 @ multi ./node_modules/nwb/polyfills.js ./demo/src/index.js
Error running command: Build failed with errors.
Error: Build failed with errors.
at /Users/david/git/demoapp/node_modules/nwb/lib/webpackBuild.js:82:17
at emitRecords.err (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:269:13)
at Compiler.emitRecords (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:375:38)
at emitAssets.err (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:262:10)
at applyPluginsAsyncSeries1.err (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:368:12)
at next (/Users/david/git/demoapp/node_modules/tapable/lib/Tapable.js:218:11)
at Compiler.compiler.plugin (/Users/david/git/demoapp/node_modules/webpack/lib/performance/SizeLimitsPlugin.js:99:4)
at Compiler.applyPluginsAsyncSeries1 (/Users/david/git/demoapp/node_modules/tapable/lib/Tapable.js:222:13)
at Compiler.afterEmit (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:365:9)
at require.forEach.err (/Users/david/git/demoapp/node_modules/webpack/lib/Compiler.js:354:15)
at /Users/david/git/demoapp/node_modules/async/dist/async.js:473:16
at iteratorCallback (/Users/david/git/demoapp/node_modules/async/dist/async.js:1050:13)
at /Users/david/git/demoapp/node_modules/async/dist/async.js:958:16
at /Users/david/git/demoapp/node_modules/graceful-fs/graceful-fs.js:43:10
at FSReqWrap.oncomplete (fs.js:112:15)`

Это неверно in '/Users/david/git/demoapp' потому что индекс находится в /Users/david/git/demoapp/src или же /Users/david/git/demoapp/lib для версии ES5, /Users/david/git/demoapp/es для версии ES6

Мой nwb.config.js выглядит так:

const path = require('path');

function excludeNodeModulesExcept (modules) {
var pathSep = path.sep;
if (pathSep === '\\') { // must be quoted for use in a regexp:
    pathSep = '\\\\';
}
var moduleRegExps = modules.map(function (modName) { return new RegExp("node_modules" + pathSep + modName);});

return function (modulePath) {
    if (/node_modules/.test(modulePath)) {
        for (var i = 0; i < moduleRegExps.length; i++) {
            if (moduleRegExps[i].test(modulePath)) {
                console.log("Allowed babel transpiling of " + modulePath);
                return false;
            }
        }
        return true;
    }
    return false;
};
}

module.exports = {
type: 'react-component',
npm: {
    esModules: true,
    umd: false
},
webpack: {
    rules: {
        babel: {
            exclude: excludeNodeModulesExcept(['kontraktor-client', 'kontraktor-common']),
            options: {
                babelrc: false,
                cacheDirectory: true
            }
        }
    }
}
};

Соответствующая часть моего package.json выглядит так:

{
"name": "demoapp",
"version": "1.0.0",
"description": "Demo App",
"main": "lib/index.js",
"module": "es/index.js",
"files": [
"css",
"es",
"lib",
"umd"
],
"scripts": {
"build": "nwb build-react-component",
"images": "node imagesServer/index.js",
"serve": "nwb serve-react-app",
"clean": "nwb clean-module",
"start": "npm-run-all --parallel serve images",
"test": "nwb test-react",
"test:coverage": "nwb test-react --coverage",
"test:watch": "nwb test-react --server"
},

Есть ли способ указать nwb, где находится исходный index.js? Я хочу построить ES5-версию этого приложения React.

Другая путаница заключается в том, что в некоторых публикациях и руководствах говорится, что каталог с именем dist используется для вывода встроенного кода из npm run build?

1 ответ

Reaction-приложение не поддерживает импорт файлов за пределы папки src. такой короткий ответ, вам придется выбросить

или вы можете использовать ссылку npm, но ваш модуль должен экспортировать es5, потому что заново реагирует - приложение не перенесет его для вас.

Другие вопросы по тегам