使用 vue-loader 和 webpack2 加载 Stylus 库和全局工作表

Posted

技术标签:

【中文标题】使用 vue-loader 和 webpack2 加载 Stylus 库和全局工作表【英文标题】:Load Stylus library and Global sheet with vue-loader and webpack2 【发布时间】:2017-07-05 09:19:56 【问题描述】:

我正在尝试将我开始使用 bourgeon template 的项目迁移到 Quasar framework。

在这个过程中,我必须从 Webpack 1 更新到 2。除了以下之外,一切都很好:

我正在使用带有一些库(Rupture 和 Jeet)的手写笔和一个样式表,我在其中存储了一些应该全局可用的变量以及 任何 vue 文件。我看到另一个主题是在所有需要它的vue文件中手动导入手写笔表。但为此,我更愿意根据 bourgeon 模板在全球范围内自动使用。


注意 在下面的代码中,我删除了non-necessary code by ...

在 webpack 2 for Quasar 中,文件如下。


css-utils.js

Link

基本上,它以以下形式输出 vue-loader 或常规样式加载器的加载器配置(请注意,我删除了对 SASS 的引用,因为它与此处无关):

 
  css: 'vue-style-loader!css-loader',
  styl: 'vue-style-loader!css-loader!stylus-loader,
  stylus: 'vue-style-loader!css-loader!stylus-loader


webpack.base.conf.js

Link

感兴趣的代码部分是:

module: 
  rules: [
    ...
    
      test: /\.vue$/,
      loader: 'vue-loader',
      options: 
        postcss: cssUtils.postcss,
        loaders: merge(js: 'babel-loader', cssUtils.styleLoaders(
          sourceMap: useCssSourceMap,
          extract: env.prod
        ))
      
    
    ...
  ]


我希望移植到 v2 的 Webpack v1 配置

module.exports = 
  ...
  stylus: 
    use: [
      require('jeet')(),
      require('rupture')(),
    ],
    import: [
      path.resolve(__dirname, '../src/styles/index.styl')
    ]
  


我对 Webpack v2 的问题

我无法找到将这段代码(来自 webpack 1 语法)添加到 css-utils.js 或 webpack.config.base.js 以供 vue 文件和 styl/stylus 文件 Jeet 和 Rupture 库index.styl 表

我浏览了vue-loader 和stylus-loader 的文档,但我无法让它工作。

在 webpack.config.base.js 中添加以下代码不起作用,我不知道该怎么做。 Node 向我输出一条消息错误,明确指出 Jeet/Ruptureindex.styl 都没有被导入,因为它无法重新整理我在 index.styl 中定义的一些变量或来自 Rupture 的 +above('tablet') 之类的语法。

module.exports = 
  ...
  rules: [
   ...      
  ],
  plugins: [
   ...
  new webpack.LoaderOptionsPlugin(
    minimize: env.prod,
    options: 
      context: path.resolve(__dirname, '../src'),
      ...
      stylus: 
       default: 
         use: [
          require('jeet')(),
          require('rupture')()
         ],
         import: [
           path.resolve(__dirname, '../src/styles/index.styl')
         ]
       
      
     
   )
  ]


任何帮助将不胜感激,谢谢:)

【问题讨论】:

你试过没有那个“默认”吗?意思是 stylus: use.... 。 嗨,很抱歉回答迟了,我不得不把这个搁置几天。它确实有效,虽然我很确定我之前尝试过,但是在 webpack 配置中进行了一些清理之后(实际上是从头开始),它现在可以工作了。非常感谢。 【参考方案1】:

正如@Razvan Stoenescu 所指出的,以下代码解决了我的问题。非常感谢。

module.exports = 
  ...
  rules: [
   ...      
  ],
  plugins: [
   ...
   new webpack.LoaderOptionsPlugin(
     minimize: env.prod,
    options: 
     context: path.resolve(__dirname, '../src'),
     ...
     stylus: 
        use: [
         require('jeet')(),
         require('rupture')()
        ],
        import: [
         path.resolve(__dirname, '../src/styles/index.styl')
        ]
      
    
  )
 ]

【讨论】:

有没有办法在角 cli 中为角 4 配置 jeet 和破裂? 你知道为什么我得到 Path must be a string error with that code sn-p?

以上是关于使用 vue-loader 和 webpack2 加载 Stylus 库和全局工作表的主要内容,如果未能解决你的问题,请参考以下文章

vue环境搭建

vue-loader:如何在 webpack 4 和 vue-cli3 中使用 vue-loader v15

Webpack2 不理解我的 SASS 文件中的 @import 语句(如何使用 webpack2 编译 SASS?)

Webpack2,如何从构建中排除 react 和 react dom

webpack2.0 基本使用

使用 vue 2、路由器和 vue-loader 进行引导