2017-04-16 4 views
1

Ich baue eine App auf, die mehrere Einstiegspunkte hat. Es ist eine Plugin/Sideloading-React-Architektur.brunch.io conventions.ignored respektiert nicht node_modules

Ich habe eine Base-React-App kompiliert in app.js und vendor.js ganz gut. Das Problem entsteht, wenn das sekundäre Projekt, das Thema, mit einigen der gleichen Abhängigkeiten gebündelt wird. Vor allem reagieren und reagieren. Ich möchte in der Lage sein, conventions.igned zu verwenden, um Brunch anzuweisen, bestimmte node_modules und ihre Abhängigkeiten zu ignorieren. Unabhängig von der Regex, die ich in Conventions gesetzt habe. Ich werde immer noch reagieren und reagieren im theme_vendor.js Bundle. Siehe Konfiguration unten:

const {theme_name} = require('./package.json'); 
module.exports = { 
    sourceMaps: 'inline', 
    files: { 
     javascripts: { 
      joinTo: { 
       "theme.js": [ 
        /^theme/, 
       ], 
       "theme_vendor.js": [ 
        /^(?!theme)/, 
       ], 
      } 
     }, 
     stylesheets: { 
      joinTo: { 
       'theme.css': ["theme/config/styles/index.scss"], 
       'theme_ie11.css': ["theme/config/styles/ie.scss"], 
      } 
     } 
    }, 
    conventions: { 
     ignored: [ 
      /\/_/, 
      "node_modules\/react", 
      "node_modules\/react-dom", 
     ], 
    }, 
    plugins: { 
     babel: { 
      presets: ['es2015', 'stage-0', 'react'], 
      plugins: [ 
       ['transform-runtime', { 
        polyfill: false, 
        regenerator: true 
       }] 
      ], 
     }, 
     sass: { 
      options: { 
       includePaths: [], 
       precision: 15 
      }, 
      mode: 'native', 
      sourceMapEmbed: true, 
      debug: 'comments' 
     }, 
     copycat: { 
      "fonts/slick-carousel": ["node_modules/slick-carousel/slick/fonts"], 
      "img/slick-carousel": ["node_modules/slick-carousel/slick/ajax-loader.gif"], 
      "": ["theme/theme_header.tmpl", "theme/theme_body.tmpl", "theme/theme_footer.tmpl"], 
     } 
    }, 
    modules: { 
     nameCleaner: path => path.replace('', theme_name + '/') 
    }, 
    notifications: false, 
    hot: false, 
    paths: { 
     public: '../', 
     watched: [ 
      'theme', 
      'initialize.js', 
     ] 
    }, 
    overrides: { 
     production: { 
      optimize: true, 
      sourceMaps: false, 
      plugins: { 
       autoReload: { 
        enabled: false 
       } 
      }, 
      paths: { 
       // public: "dist/" 
      } 
     } 
    } 
}; 

Die einzige Möglichkeit, etwas in der Nähe zu erreichen, ist die Verwendung einer Negation in JoinTo. Siehe unten:

javascripts: { 
      joinTo: { 
       "theme.js": [ 
        /^theme/, 
       ], 
       "theme_vendor.js": [ 
        /^(?!theme|node_modules\/react|node_modules\/react-dom)/, 
       ], 
      } 
     }, 

Vielen Dank im Voraus für Ihre Hilfe. Weitere Informationen:

"dependencies": { 
    "react-click-outside": "^2.2.0", 
    "react-image-gallery": "^0.7.15", 
    "react-slick": "^0.14.7", 
    "slick-carousel": "^1.6.0" 
    }, 
    "devDependencies": { 
    "auto-reload-brunch": "^2", 
    "babel-brunch": "~6.0.0", 
    "babel-plugin-transform-runtime": "^6.23.0", 
    "babel-preset-es2015": "^6.24.0", 
    "babel-preset-react": "~6.22", 
    "babel-preset-stage-0": "^6.22.0", 
    "brunch": "^2", 
    "clean-css-brunch": "^2", 
    "copycat-brunch": "^1.1.0", 
    "hmr-brunch": "^0.1", 
    "redux-devtools": "^3.3.2", 
    "redux-devtools-dock-monitor": "^1.1.1", 
    "redux-devtools-log-monitor": "^1.2.0", 
    "sass-brunch": "^2.10.4", 
    "uglify-js-brunch": "^2", 
    "isomorphic-fetch": "^2.2.1", 
    "react": "^15.4", 
    "react-addons-css-transition-group": "^15.4.2", 
    "react-dom": "^15.4", 
    "react-redux": "~4.3.0", 
    "react-router": "^3.0.2", 
    "react-router-redux": "^4.0.8", 
    "redux": "~3.2.1", 
    "redux-form": "^6.6.2", 
    "redux-logger": "^3.0.0", 
    "redux-saga": "^0.14.3" 
    } 

Antwort

1

Ich glaube, Sie müssen dies tun:

conventions: { 
    vendor: /(^bower_components|node_modules(?!\/react)|vendor)\// 
} 

Siehe auch docs.

EDIT: Ich änderte die Antwort. Dieser Regex passt nicht zu den beiden reaktiven Knotenmodulen und wird daher nicht in Ihrer Datei enthalten sein.

+0

danke für den Vorschlag. Das ist ein guter Workaround ... aber ich möchte nicht, dass die Dateien in das öffentliche Verzeichnis kopiert werden, ich möchte sie einfach ignorieren. – Menklab

+0

Oh ja, meine Schuld. Mit diesem werden sie kopiert, wenn sie in der Liste sind, also wenn es eine Übereinstimmung ist. Vielleicht musst du eine RegEx erstellen, die sie ausschließt. –

+0

Ich habe meine Antwort aktualisiert. Funktioniert es jetzt? –

Verwandte Themen