错误: 无法找到或读取要导入的文件:~bootstrap/scss/bootstrap

44

我按照getbootstrap.com上的说明进行操作,以为一切都会正常运行。但目前情况并不是这样的:\

所有东西看起来都没问题,直到我尝试加载页面时,我的Express.js应用程序就会抛出错误。

    [[sass] error: File to import not found or unreadable: ~bootstrap/scss/bootstrap. 
Parent style sheet: .../sass/app.scss at options.error (.../node-sass/lib/index.js:291:26)

我已经尝试过npm install、重新启动服务器、在Google和StackOverflow上查找(是的,我知道有很多类似的问题,但没有一个能回答我的问题),以及查看Bootstrap 4 GitHub的问题页面,但到目前为止,我还没有找到答案。

可能是我把依赖项安装在了错误的位置?(开发环境而不是生产环境或反之亦然)

为什么会出现这个错误??

我的webpack.config.js文件看起来像这样...

 module.exports = {
  entry: './src/index.js',
  output: {
    path: __dirname + '/public',
    filename: 'bundle.js'
  },
  module: {
    loaders: [
      {
        test: /\.json$/,
        loader: 'json-loader'
      },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
      {
        test: /\.(scss)$/,
        use: [{
          loader: 'style-loader', // inject CSS to page
        }, {
          loader: 'css-loader', // translate CSS into CommonJS modules
        }, {
          loader: 'postcss-loader', // run post CSS actions
          options: {
            plugins: function () { // post css plugins, can be exported to postcss.config.js
              return [
                require('precss'),
                require('autoprefixer')
              ];
            }
          }
        }, {
          loader: 'sass-loader' // compile Sass to CSS
        }]
      }
    ]
  }
};

我的 package.json 文件

...
"scripts": {
    "start": "nodemon --exec babel-node server.js --ignore public/",
    "dev": "webpack -wd",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
"dependencies": {
    "axios": "^0.17.1",
    "bootstrap": "^4.0.0",
    "ejs": "^2.5.7",
    "express": "^4.16.2",
    "jquery": "^3.3.1",
    "mongoose": "^5.0.0",
    "node-sass-middleware": "^0.11.0",
    "popper.js": "^1.12.9",
    "precss": "^3.1.0",
    "react": "^16.2.0",
    "react-dom": "^16.2.0"
  },
  "devDependencies": {
    "autoprefixer": "^7.2.5",
    "babel-cli": "^6.26.0",
    "babel-eslint": "^8.2.1",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "babel-preset-stage-2": "^6.24.1",
    "css-loader": "^0.28.9",
    "eslint": "^4.15.0",
    "eslint-plugin-react": "^7.5.1",
    "node-sass": "^4.7.2",
    "nodemon": "^1.14.11",
    "postcss-loader": "^2.0.10",
    "sass-loader": "^6.0.6",
    "style-loader": "^0.19.1",
    "webpack": "^3.10.0"
  }
}

postcss.config.js

module.exports = {
  plugins: [
    require('autoprefixer')
  ]
};

在 app.scss 文件中,我有以下内容:

@import "custom";
@import "~bootstrap/scss/bootstrap";

尝试在所有其他内容之前导入“bootstrap/scss/bootstrap”。 - Ram Chandra Neupane
@DayOne 我猜你指的是app.scss中的@import。有什么原因会导致这样的区别吗?这两个@import行是文件中的前两行,并且它们按照https://getbootstrap.com/docs/4.0/getting-started/webpack/中的文档所示出现。 - quarterpi
3
如果我理解正确的话,当Sass使用自己的CLI进行预编译时,它会自行处理 @import,因此无法理解 ~ 符号。因此,您可以在第一位置导入 @import "bootstrap/scss/bootstrap"; 或者用 node_modules/ 替换 ~ 符号,也许这样可以起作用。 - Ram Chandra Neupane
@DayOne 好的,我会试一下。谢谢你的建议。 - quarterpi
@DayOne,很抱歉这么晚才回复你,但是"node_modules/bootstrap/scss/bootstrap";解决了问题;而"bootstrap/scss/bootstrap";则没有。请回复“Answer”以便我给你点赞。我仍然不明白为什么node_modules/...可以工作,而bootstrap/...不能?无论如何,+1。谢谢! - quarterpi
12个回答

66

当Sass通过其自己的CLI进行预编译时,它会自行处理@imports,有时候无法理解~符号。因此,您可以首先导入"node_modules/bootstrap/scss/bootstrap";,并用node_modules/代替~符号。


10
谢谢,我让它工作了,但我需要返回几个目录:@import '../../node_modules/bootstrap/scss/bootstrap'; - Second2None
你是说scss/functions目录不需要存在吗? - mathtick

13

我也曾遇到类似的错误。

无法找到或读取要导入的文件: node_modules/bootstrap-sass/assets/stylesheets/bootstrap

只需在您的 package.json 文件中的 devDependencies 中添加 "bootstrap-sass": "^3.3.7",然后在您的项目目录下运行 npm update 和 npm install 命令即可。


这对我很有效,添加“bootstrap-scss”,然后@import“〜bootstrap-scss / bootstrap”; - imaginabit
3
未来的读者注意,在 bootstrapbootstrap-sassbootstrap-scss 之间选择正确的软件包。对于问题描述中的错误,将 bootstrap 作为依赖项应该可以解决。 - Nickolay

5

对我来说,我必须改变我的导入方式。

@import '../../../node_modules/bootstrap/scss/bootstrap';

然后它就可以工作了。


1
这个有用了,谢谢。奇怪的是,在我最初设置好所有东西时它还在运行,但我一晚上离开后回来它就停止了。 - Patrick

4
在Rails 7.0.1中,使用rails new myapp --css=bootstrap安装后,发生了相同的错误。问题已通过以下方式解决:
  • application.erb文件中的stylesheet_link_tag行替换为:stylesheet_link_tag "application.bootstrap", "data-turbo-track": "reload"
  • app/assets/stylesheets/application.scss重命名为app/assets/stylesheets/application.bootstrap.scss
  • 将内容替换为@import '../../../node_modules/bootstrap/scss/bootstrap';

3

虽然我没有使用webpack,但是在我的scss文件中像这样导入bootstrap时也遇到了同样的错误:

@import 'bootstrap';

如果按照我的情况这样导入,它就能够工作:

@import "../../../../../bootstrap/scss/bootstrap";

但是由于这不够规范清晰,我发现可以修改我的 gulp scss 任务:

.pipe(plugins.sass())

致:

.pipe(plugins.sass({
    outputStyle: 'nested',
    precision: 3,
    errLogToConsole: true,
    includePaths: ['node_modules/bootstrap/scss']
}))

(注意includePaths部分),现在我可以直接使用。
@import 'bootstrap';

在我的scss文件中。

我在这里稍微阐述一下这个2020年的方法:https://dev59.com/u1cP5IYBdhLWcg3wVok6#65239936 - MikeiLL

1

我遇到了类似的问题,最终解决方法非常基础。

我只需要将"../node_modules/bootstrap/scss/bootstrap";更改为"node_modules/bootstrap/scss/bootstrap";即可。


1

我正在使用Solidus,在与其一起使用bootstrap时遇到了相同的问题。
以下内容对我有用,因为我们必须显示bootstrap所在的完整路径。

@import "../../../../../node_modules/bootstrap/scss/bootstrap";

0

如果您遇到任何问题并且答案无法解决,请尝试以下方法:

  1. 打开尝试导入的 scss 文件。

  2. 更正导入地址,可能是从不同的空间尝试。


0
我通过以下步骤解决了问题:
  • 删除 node_modules 文件夹
  • 运行 npm install 命令
  • 运行 ng serve 命令

问题已经解决啦! ;)


0

我刚刚运行了npm i bootstrap,它正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接