【问题标题】:Webpack fails to load bootstrap v4.0.0-betaWebpack 无法加载 bootstrap v4.0.0-beta
【发布时间】:2018-01-21 11:23:55
【问题描述】:

我最近使用 webpack 和 bootstrap v4.0.0-alpha.6 进行了配置,直到今天我尝试更改为 v4 beta 时它运行良好,但现在我似乎无法使其正常工作:( 我有这个配置:

webpack.config.js

entry: {
    app: "./src/app.js"
},
output: {
    path: path.resolve(__dirname, 'public'),
    filename: 'js/[name].js',
    hotUpdateChunkFilename: 'hot/hot-update.js',
    hotUpdateMainFilename: 'hot/hot-update.json'
},
module: {
    loaders: [
        { test: /\.js$/, exclude: /node-modules/, loader: 'babel-loader' },
        { test: /\.html$/, loader: 'raw-loader', exclude: /node_modules/ },
        {   test: /\.(css|scss|sass)$/,
            loader: ExtractTextPlugin.extract({
                fallback: "style-loader",
                use: ['css-loader', 'postcss-loader', 'sass-loader']
            }),
            exclude: /node_modules/
        }           
    ]
},
plugins: [
    new webpack.ProvidePlugin({ // inject ES5 modules as global vars
        $: 'jquery',
        jQuery: 'jquery',
        'window.jQuery': 'jquery',
        Popper: ['popper.js', 'default']
    }),
    new ExtractTextPlugin('/css/[name].css'),

在我的 app.js 我有 require('bootstrap'); 现在,当我现在尝试进行构建时,出现错误:

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.js
Module build failed: ReferenceError: Unknown plugin "transform-es2015-modules-strip" specified in "E:\\Documente\\Work\\wordpress\\wordpressSite\\wp-content\\themes\\bsTheme\\node_modules\\bootstra
p\\.babelrc" at 0, attempted to resolve relative to "E:\\Documente\\Work\\wordpress\\wordpressSite\\wp-content\\themes\\bsTheme\\node_modules\\bootstrap"

问题似乎出在bootstrap/.babelrc

{
    "presets": [
        [
            "es2015",
            {
                "loose": true,
                "modules": false
            }
        ]
    ],
    "plugins": [
        "transform-es2015-modules-strip"
    ]
}

我试图进入引导目录并运行:npm install(我不知道为什么我应该这样做,因为我已经有自己的 bable/autoprefixer 配置) 我已经在自己的 package.json 中安装了 babel-core、babel-loader、babel-preset-es2015 我安装了transform-es2015-modules-strip 并再次运行构建:

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.js
Module not found: Error: Can't resolve 'jquery' in 'E:\Documente\Work\wordpress\wordpressSite\wp-content\themes\bsTheme\node_modules\bootstrap\dist\js'
 @ ./node_modules/bootstrap/dist/js/bootstrap.js 1:0-17
 @ ./src/app.js

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.js
Module not found: Error: Can't resolve 'popper.js' in 'E:\Documente\Work\wordpress\wordpressSite\wp-content\themes\bsTheme\node_modules\bootstrap\dist\js'
 @ ./node_modules/bootstrap/dist/js/bootstrap.js 1:0-20
 @ ./src/app.js

所以我尝试在我的项目中安装 jquery 和 popper 作为开发依赖...摆脱了 jquery 错误但是..:

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.js
Module not found: Error: Can't resolve 'popper.js' in 'E:\Documente\Work\wordpress\wordpressSite\wp-content\themes\bsTheme\node_modules\bootstrap\dist\js'
 @ ./node_modules/bootstrap/dist/js/bootstrap.js 1:0-20
 @ ./src/app.js

没有想法...这似乎过于复杂...我似乎不知道自己做错了什么,我唯一能想到的就是将bootstrap.js文件直接放入与我的其他 js 文件......很长的帖子,但我想尽可能具体。

我应该怎么做才能让它再次工作,我非常感谢一些帮助。谢谢

【问题讨论】:

  • 不要从其他模块源目录 npm 安装,首先尝试 rm -rf node_modules。然后重新安装它们,看看会发生什么
  • 再次尝试(已经这样做了 2 次)这次我在我的开发依赖项中有 popper 和 jquery,但我仍然得到相同的最后一个错误: ./node_modules/bootstrap/dist/js 中的错误/bootstrap.js 未找到模块:错误:无法解析 'popper.js' in...
  • 如果你从 webpack 中删除 Popper: ['popper.js', 'default'] 会发生什么?
  • 当我从 webpack.config.js 中删除 popper 时,它没有错误地构建,谢谢。我从getbootstrap.com/docs/4.0/getting-started/webpack 得到了配置我仍然对整个 webpack 引导配置感到困惑,仍然不确定我是否仍然需要将 Jquery 作为依赖项安装,或者我是否还需要其他配置,我会测试更多看看。
  • 您确实需要 jquery 才能使用导航栏上的移动响应式菜单按钮

标签: javascript webpack bootstrap-4


【解决方案1】:

升级到bootstarp最新版本4.0.0时出现此错误。

ERROR in ./node_modules/bootstrap/dist/js/bootstrap.js
Module not found: Error: Can't resolve 'popper.js' in 'E:\work\nodejs\mepos\node_modules\bootstrap\dist\js'
 @ ./node_modules/bootstrap/dist/js/bootstrap.js 7:100-120

我刚刚添加了popper.js 依赖,它解决了这个问题。 jquery 已添加到我的依赖项中)

npm install popper.js --save

【讨论】:

    【解决方案2】:

    在没有信号的情况下安装引导程序:^ (npm install bootstrap@^4.0.0-alpha.6)

    像这样:npm install bootstrap@4.0.0-alpha.6

    【讨论】:

      【解决方案3】:

      我发现了同样的错误 经过一番搜索找到设计找到解决方案:

      首先你需要安装:

      npm install babel-plugin-transform-es2015-modules-strip
      

      然后他们安装:

      babel-preset-es2015
      babel-preset-stage-2
      

      我还附上了之前和之后的图像。 希望就是帮助。

      【讨论】:

      • 嗨,你能解释一下你上面的答案:你为什么要安装 babel 插件?
      【解决方案4】:

      经过多次测试,这是我运行 bootstrap v4.0.0-betaWebpack 的结论,因此您需要手动安装 jquery 和 popper.js,它不会再通过引导程序安装为依赖项。如果没有 jquery,它将无法工作,并且如果没有 popper.js,下拉菜单/弹出窗口将无法工作,所以:

      npm install bootstrap@4.0.0-beta -D
      npm install jquery -D
      npm install popper.js -D
      

      我最终编辑了这篇文章,因为有人指出 popper 和 popper.js 是 2 个不同的库(我不知道)我试图用 npm install popper 安装 popper.js,因此我有问题...因此使用npm install popper.js 安装它将安装它的最新版本(和正确的库)。 然后你必须像https://getbootstrap.com/docs/4.0/getting-started/webpack/中提到的那样更改webpack.config.js

      plugins: [
          ...
            new webpack.ProvidePlugin({
              $: 'jquery',
              jQuery: 'jquery',
              'window.jQuery': 'jquery',
              Popper: ['popper.js', 'default'],            
              ...
            })
          ...
        ]
      

      那么配置的其余部分应该与 v4 alpha 相同。无论如何,这是我在挣扎了一段时间后发现的。希望它会帮助某人。

      【讨论】:

      • 安装popper.js你会得到popper.js@1.12.0popper是一个完全不同的库,与popper.js无关
      • 现在BS推荐使用popper.js@1.12.3 github.com/twbs/bootstrap/pull/23626
      • 这也适用于 Webpack 1 吗?我仍然在使用 webpack 1 :( 并收到一些讨厌的错误说 this.state.current.addBlock is not a function 有什么解决方案吗?
      • @Alin Faur,感谢您的解决方案。
      • 我得到了同样的结果stackoverflow.com/questions/52539120/…
      【解决方案5】:

      我想是因为 popper 吧? Popper v1.10 在 npm 上不可用,因此您可能安装了 Popper v1.0.0。

      【讨论】:

      • @temuz Popper.js@1.10.0 在 npm 上可用,根据 npm 日志,它已在 2017-06-14T16:20:28.282Z 发布。
      猜你喜欢
      • 2017-04-30
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 1970-01-01
      • 2019-11-20
      • 2021-12-07
      • 2017-06-12
      相关资源
      最近更新 更多