2017-11-20 40 views
0

と反応するアプリ反応:私のようなブートストラップインポートブートストラップJSがでロードしていないが、私は私の中に、次のテストコンポーネントを持っているのWebPACK

test2: function() {                  
    return (                       
    <div class="dropdown">                   
     <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-t 
oggle="dropdown" aria-haspopup="true" aria-expanded="true">           
     Dropdown button                    
     </button>                      
     <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">        
     <a class="dropdown-item" href="#">Action</a>             
     <a class="dropdown-item" href="#">Another action</a>           
     <a class="dropdown-item" href="#">Something else here</a>         
     </div>                       
    </div>                       
    );                        
}, 

を:

インポート「ブートストラップ」を

私はSCSSをインポート私のトップレベルのscssファイルとスタイリングでうまくいきます。問題は、JSを動作させることができないということです。ドロップダウンボタンをクリックしても何も起こりません。ファイルがロードされていないようです。

popper.setAttribute('x-placement', placement); 

    "cannot read property setAttribute of undefined" 

が、ポッパーが定義されていない理由を私は理解することはできません。

私はボタンをクリックしたときにJSでこのエラーを得ますか。私はそれをNPMにインストールし、Webpackの設定に追加しました。

なぜこの問題が発生しているのですか?

私のWebPACKの設定は次のとおりです。

const autoprefixer = require('autoprefixer'); 
const path = require('path'); 
const webpack = require('webpack'); 
const HtmlWebpackPlugin = require('html-webpack-plugin'); 
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); 
const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); 
const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); 
const eslintFormatter = require('react-dev-utils/eslintFormatter'); 
const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin'); 
const getClientEnvironment = require('./env'); 
const paths = require('./paths'); 

// Webpack uses `publicPath` to determine where the app is being served from. 
// In development, we always serve from the root. This makes config easier. 
const publicPath = '/'; 
// `publicUrl` is just like `publicPath`, but we will provide it to our app 
// as %PUBLIC_URL% in `index.html` and `process.env.PUBLIC_URL` in JavaScript. 
// Omit trailing slash as %PUBLIC_PATH%/xyz looks better than %PUBLIC_PATH%xyz. 
const publicUrl = ''; 
// Get environment variables to inject into our app. 
const env = getClientEnvironment(publicUrl); 

// This is the development configuration. 
// It is focused on developer experience and fast rebuilds. 
// The production configuration is different and lives in a separate file. 
module.exports = { 
    // You may want 'eval' instead if you prefer to see the compiled output in DevTools. 
    // See the discussion in https://github.com/facebookincubator/create-react-app/issues/343. 
    devtool: 'cheap-module-source-map', 
    // These are the "entry points" to our application. 
    // This means they will be the "root" imports that are included in JS bundle. 
    // The first two entry points enable "hot" CSS and auto-refreshes for JS. 
    entry: [ 
    // Include an alternative client for WebpackDevServer. A client's job is to 
    // connect to WebpackDevServer by a socket and get notified about changes. 
    // When you save a file, the client will either apply hot updates (in case 
    // of CSS changes), or refresh the page (in case of JS changes). When you 
    // make a syntax error, this client will display a syntax error overlay. 
    // Note: instead of the default WebpackDevServer client, we use a custom one 
    // to bring better experience for Create React App users. You can replace 
    // the line below with these two lines if you prefer the stock client: 
    // require.resolve('webpack-dev-server/client') + '?/', 
    // require.resolve('webpack/hot/dev-server'), 
    require.resolve('react-dev-utils/webpackHotDevClient'), 
    // We ship a few polyfills by default: 
    require.resolve('./polyfills'), 
    // Errors should be considered fatal in development 
    require.resolve('react-error-overlay'), 
    // Finally, this is your app's code: 
    paths.appIndexJs, 
    // We include the app code last so that if there is a runtime error during 
    // initialization, it doesn't blow up the WebpackDevServer client, and 
    // changing JS code would still trigger a refresh. 
    ], 
    output: { 
    // Next line is not used in dev but WebpackDevServer crashes without it: 
path: paths.appBuild, 
    // Add /* filename */ comments to generated require()s in the output. 
    pathinfo: true, 
    // This does not produce a real file. It's just the virtual path that is 
    // served by WebpackDevServer in development. This is the JS bundle 
    // containing code from all our entry points, and the Webpack runtime. 
    filename: 'static/js/bundle.js', 
    // There are also additional JS chunk files if you use code splitting. 
    chunkFilename: 'static/js/[name].chunk.js', 
    // This is the URL that app is served from. We use "/" in development. 
    publicPath: publicPath, 
    // Point sourcemap entries to original disk location 
    devtoolModuleFilenameTemplate: info => 
     path.resolve(info.absoluteResourcePath), 
    }, 
    resolve: { 
    // This allows you to set a fallback for where Webpack should look for modules. 
    // We placed these paths second because we want `node_modules` to "win" 
    // if there are any conflicts. This matches Node resolution mechanism. 
    // https://github.com/facebookincubator/create-react-app/issues/253 
    modules: ['node_modules', paths.appNodeModules].concat(
     // It is guaranteed to exist because we tweak it in `env.js` 
     process.env.NODE_PATH.split(path.delimiter).filter(Boolean) 
    ), 
    // These are the reasonable defaults supported by the Node ecosystem. 
    // We also include JSX as a common component filename extension to support 
    // some tools, although we do not recommend using it, see: 
    // https://github.com/facebookincubator/create-react-app/issues/290 
    extensions: ['.js', '.json', '.jsx', '.es6'], 
    alias: { 

     // Support React Native Web 
     // https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/ 
     'react-native': 'react-native-web', 
     '_': '../node_modules/underscore/underscore.js' 
    }, 
    plugins: [ 
      // Prevents users from importing files from outside of src/ (or node_modules/). 
     // This often causes confusion because we only process files within src/ with babel. 
     // To fix this, we prevent you from importing files out of src/ -- if you'd like to, 
     // please link the files into your node_modules/ and let module-resolution kick in. 
     // Make sure your source files are compiled, as they will not be processed in any way. 
     new ModuleScopePlugin(paths.appSrc), 
    ], 
    }, 
module: { 
    strictExportPresence: true, 
    rules: [ 
     // TODO: Disable require.ensure as it's not a standard language feature. 
     // We are waiting for https://github.com/facebookincubator/create-react-app/issues/2176. 
     // { parser: { requireEnsure: false } }, 

     // First, run the linter. 
     // It's important to do this before Babel processes the JS. 
     { 
     test: /\.(js|jsx)$/, 
     enforce: 'pre', 
     use: [ 
      { 
      options: { 
       formatter: eslintFormatter, 

      }, 
      loader: require.resolve('eslint-loader'), 
      }, 
     ], 
     include: paths.appSrc, 
     }, 
     // ** ADDING/UPDATING LOADERS ** 
     // The "file" loader handles all assets unless explicitly excluded. 
     // The `exclude` list *must* be updated with every change to loader extensions. 
     // When adding a new loader, you must add its `test` 
     // as a new entry in the `exclude` list for "file" loader. 

     // "file" loader makes sure those assets get served by WebpackDevServer. 
     // When you `import` an asset, you get its (virtual) filename. 
     // In production, they would get copied to the `build` folder. 
     { 
     exclude: [ 
      /\.es6$/, 
      /\.html$/, 
      /\.(js|jsx)$/, 
      /\.css$/, 
      /\.json$/, 
      /\.bmp$/, 
      /\.gif$/, 
      /\.jpe?g$/, 
      /\.png$/, 
      /\.sass$/, 
      /\.scss$/, 
     ], 
     loader: require.resolve('file-loader'), 
     options: { 
      name: 'static/media/[name].[hash:8].[ext]', 
     }, 
     }, 
    // "url" loader works like "file" loader except that it embeds assets 
     // smaller than specified limit in bytes as data URLs to avoid requests. 
     // A missing `test` is equivalent to a match. 
     { 
     test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/], 
     loader: require.resolve('url-loader'), 
     options: { 
      limit: 10000, 
      name: 'static/media/[name].[hash:8].[ext]', 
     }, 
     }, 
      // Process JS with Babel. 
     { 
     test: /\.(js|jsx)$/, 
     include: paths.appSrc, 
     loader: require.resolve('babel-loader'), 
     options: { 

      // This is a feature of `babel-loader` for webpack (not Babel itself). 
      // It enables caching results in ./node_modules/.cache/babel-loader/ 
      // directory for faster rebuilds. 
      cacheDirectory: true, 
     }, 
     }, 
     // "postcss" loader applies autoprefixer to our CSS. 
     // "css" loader resolves paths in CSS and adds assets as dependencies. 
     // "style" loader turns CSS into JS modules that inject <style> tags. 
     // In production, we use a plugin to extract that CSS to a file, but 
     // in development "style" loader enables hot editing of CSS. 
     // 
    { test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader'}, 
     { 
     test: /\.css$/, 
     use: [ 
      require.resolve('style-loader'), 
      { 
      loader: require.resolve('css-loader'), 
      options: { 
       importLoaders: 1, 
      }, 
      }, 
      { 
      loader: require.resolve('postcss-loader'), 
      options: { 
       plugins: function() { // post css plugins, can be exported to postcss.config.js 
       return [ 
        require('precss'), 
        require('autoprefixer') 
       ]; 
       } 
      }, 
      }, 
     ], 
     }, 
    // ** STOP ** Are you adding a new loader? 
     // Remember to add the new extension(s) to the "file" loader exclusion list. 
    ], 
    }, 
    plugins: [ 
     // Makes some environment variables available in index.html. 
    // The public URL is available as %PUBLIC_URL% in index.html, e.g.: 
    // <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico"> 
    // In development, this will be an empty string. 
    new InterpolateHtmlPlugin(env.raw), 
    // Generates an `index.html` file with the <script> injected. 
    new HtmlWebpackPlugin({ 
     inject: true, 
     template: paths.appHtml, 
    }), 
    // Makes some environment variables available to the JS code, for example: 
    // if (process.env.NODE_ENV === 'development') { ... }. See `./env.js`. 
    new webpack.DefinePlugin(env.stringified), 
    // This is necessary to emit hot updates (currently CSS only): 
    new webpack.HotModuleReplacementPlugin(), 
    // Watcher doesn't work well if you mistype casing in a path so we use 
    // a plugin that prints an error when you attempt to do this. 
    // See https://github.com/facebookincubator/create-react-app/issues/240 
    new CaseSensitivePathsPlugin(), 
    // If you require a missing module and then `npm install` it, you still have 
    // to restart the development server for Webpack to discover it. This plugin 
    // makes the discovery automatic so you don't have to restart. 
    // See https://github.com/facebookincubator/create-react-app/issues/186 
    new WatchMissingNodeModulesPlugin(paths.appNodeModules), 
    // Moment.js is an extremely popular library that bundles large locale files 
    // by default due to how Webpack interprets its code. This is a practical 
    // solution that requires the user to opt into importing specific locales. 
    // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack 
    // You can remove this if you don't use Moment.js: 
    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), 
    new webpack.ProvidePlugin({ 
     $: 'jquery', 
     jQuery: 'jquery', 
     'window.jQuery': 'jquery', 
     Popper: ['popper.js', 'default'] 
     }) 
    ], 
    // Some libraries import Node modules but don't use them in the browser. 
    // Tell Webpack to provide empty mocks for them so importing them works. 
    node: { 
    fs: 'empty', 
    net: 'empty', 
    tls: 'empty', 
    }, 
    // Turn off performance hints during development because we don't do any 
    // splitting or minification in interest of speed. These warnings become 
    // cumbersome. 
    performance: { 
    hints: false, 
    }, 
}; 

マイPackage.json

{ 
    "proxy": "http://localhost:3001/", 
    "name": "client", 
    "version": "0.1.0", 
    "private": true, 
    "dependencies": { 
    "bootstrap": "^4.0.0-beta.2", 
    "foundation-sites": "^6.4.2", 
    "hjs-webpack": "^9.1.0", 
    "jquery": "^3.2.1", 
    "popper.js": "^1.12.9", 
    "react": "^15.6.2", 
    "react-addons-css-transition-group": "^15.6.0", 
    "react-bootstrap": "^0.31.5", 
    "react-dom": "^15.6.2", 
    "react-loader": "^2.4.2" 
    }, 
    "devDependencies": { 
    "autoprefixer": "7.1.0", 
    "babel-core": "6.24.1", 
    "babel-eslint": "7.2.3", 
    "babel-jest": "20.0.3", 
    "babel-loader": "7.0.0", 
    "babel-preset-react-app": "^3.0.0", 
    "babel-runtime": "6.23.0", 
    "case-sensitive-paths-webpack-plugin": "1.1.4", 
    "chalk": "1.1.3", 
    "css-loader": "0.28.1", 
    "dotenv": "4.0.0", 
    "eslint": "3.19.0", 
    "eslint-config-react-app": "^1.0.4", 
    "eslint-loader": "1.7.1", 
    "eslint-plugin-flowtype": "2.33.0", 
    "eslint-plugin-import": "2.2.0", 
    "eslint-plugin-jsx-a11y": "5.0.3", 
    "eslint-plugin-react": "7.0.1", 
    "extract-text-webpack-plugin": "2.1.0", 
    "file-loader": "0.11.1", 
    "fs-extra": "3.0.1", 
    "html-webpack-plugin": "2.28.0", 
    "jest": "20.0.3", 
    "node-sass": "^4.5.3", 
    "object-assign": "4.1.1", 
    "postcss-flexbugs-fixes": "3.0.0", 
    "postcss-loader": "2.0.5", 
    "promise": "7.1.1", 
    "react-dev-utils": "^3.0.0", 
    "react-error-overlay": "^1.0.7", 
    "sass-loader": "^6.0.6", 
    "style-loader": "0.17.0", 
    "sw-precache-webpack-plugin": "0.9.1", 
    "underscore": "^1.8.3", 
    "url-loader": "0.5.8", 
    "webpack": "2.6.1", 
    "webpack-dev-server": "2.4.5", 
    "webpack-manifest-plugin": "1.1.0", 
    "whatwg-fetch": "2.0.3" 
    }, 

答えて

0

それがどのように動作するかではないこと!

反応起動ストラップを使用する場合は、使用する特定のコンポーネントをインポートする必要があります。

https://medium.com/@victorleungtw/how-to-use-webpack-with-react-and-bootstrap-b94d33765970

+0

私はこのケースでは反応ブートストラップを使用していません。私はpackage.json b/cでそれを持っています。Foundationと一緒に試してみましたが、同じ結果が得られます。何らかの理由でjsがロードされていません。 – Glen

関連する問題