umm*_*mmw 6 javascript webpack vue.js sass-loader vue-cli
我正在尝试使用Material-Components-vue和 vue-cli 使用 webpack 创建一个简单的 Web 应用程序,但是,我发现如果没有node_modules
前面的~
.
我尝试了几个 webpack/vue-cli 配置,最终得到了传递加载器选项的配置vue.config.js
。
我的vue.config.js
看起来像这样:
module.exports = {
css: {
loaderOptions: {
sass: {
includePaths: [
'./node_modules', //here I include node_modules
]
},
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我希望能够导入这样的东西:
@import 'normalize/normalize'
Run Code Online (Sandbox Code Playgroud)
(假设我有一个名为normalize
my 的目录node_modules
,其中包含一个文件normalize.scss
)
但是,webpack 会抛出错误,表示找不到该模块。
但是,这确实有效:
@import '~normalize/normalize'
Run Code Online (Sandbox Code Playgroud)
如果所有 s 都是我写的,这不会有问题@import
,但因为我使用的第三方模块@import
里面有 s,所以 webpack 无法编译。
正如@Styx要求的那样
请分享更多配置
和
显示 vuespect --rule scss 的输出,以及带有此问题导入的整个文件
这里是:
我的有问题的文件非常空:
<template>
<div id="app">
<m-button>Hello</m-button>
</div>
</template>
<script>
import Vue from 'vue'
import Button from 'material-components-vue/dist/button'
Vue.use(Button)
export default {
name: 'App',
components: {
}
</script>
<style lang="scss">
@import "~material-components-vue/dist/button/styles"; //this works
@import "material-components-vue/dist/button/styles"; //but this does not
</style>
Run Code Online (Sandbox Code Playgroud)
我的输出vue inspect --rule scss
位于此处
所有其他配置均由生成vue init webpack <name>
module.exports = {
css: {
loaderOptions: {
sass: {
includePaths: [
'./node_modules', //here I include node_modules
]
},
}
}
}
Run Code Online (Sandbox Code Playgroud)
包管理器:npm
然后,安装 sass-loader
@import 'normalize/normalize'
Run Code Online (Sandbox Code Playgroud)
vue.config.js
并使用以下内容填充它:@import '~normalize/normalize'
Run Code Online (Sandbox Code Playgroud)
之后,安装包含 scss/sass 的模块(例如material-components-web
, npm i material-components-web
)
然后,创建对位于 中的样式表的导入node_modules
,如下所示:
@import '@material/button/mdc-button'; //mdc-button comes with material-components-web
Run Code Online (Sandbox Code Playgroud)
<template>
<div id="app">
<m-button>Hello</m-button>
</div>
</template>
<script>
import Vue from 'vue'
import Button from 'material-components-vue/dist/button'
Vue.use(Button)
export default {
name: 'App',
components: {
}
</script>
<style lang="scss">
@import "~material-components-vue/dist/button/styles"; //this works
@import "material-components-vue/dist/button/styles"; //but this does not
</style>
Run Code Online (Sandbox Code Playgroud)
ERROR Failed to compile with 1 errors 11:36:35 AM
error in ./src/App.vue
Module build failed:
@import '@material/button/mdc-button';
^
File to import not found or unreadable: @material/button/mdc-button.
in /home/maxim/projects/holiday.js/stackoverflow/src/App.vue (line 18, column 1)
@ ./node_modules/vue-style-loader!./node_modules/css-loader?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compil
er?{"vue":true,"id":"data-v-7ba5bd90","scoped":false,"hasInlineConfig":false}!./node_modules/sass-loader/lib/loader.js?{"s
ourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/App.vue 4:14-359 13:3-17:5 14:22-367
@ ./src/App.vue
@ ./src/main.js
@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js
Run Code Online (Sandbox Code Playgroud)
顺便说一下,在第一个例子中我想导入material-components-vue/dist/foo/styles
,但这里我导入@material/foo
。
在此配置中,您vue.config.js
将被忽略。该文件由 所使用@vue/cli-service
,但您正在使用webpack-dev-server
。因此,您sass-loader
不会收到此includePaths
选项。
您可以使用现代vue create <app-name>
命令,或者如果您想修改现有项目:
打开build/utils.js
文件。
return ...
在函数中查找exports.cssLoaders
:
return {
...
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
...
}
Run Code Online (Sandbox Code Playgroud)像这样修改它:
const includePaths = [path.resolve(__dirname, '..', 'node_modules')];
return {
...
sass: generateLoaders('sass', { indentedSyntax: true, includePaths }),
scss: generateLoaders('sass', { includePaths }),
...
}
Run Code Online (Sandbox Code Playgroud)删除未使用的vue.config.js
文件。
归档时间: |
|
查看次数: |
5831 次 |
最近记录: |