如何在 Vue cli 项目中使用 Webpack 包含我公司的全局样式 CDN(供开发人员使用)?

Posted

技术标签:

【中文标题】如何在 Vue cli 项目中使用 Webpack 包含我公司的全局样式 CDN(供开发人员使用)?【英文标题】:How do I include my company's global styles CDN (for dev use) using Webpack, within a Vue cli project? 【发布时间】:2018-05-01 08:41:10 【问题描述】:

我尝试通过入口文件 (ma​​in.js) 导入...

import Vue from 'vue'
import App from '@/App'
import router from '@/router/router'
import store from '@/store/store'
import BootstrapVue from 'bootstrap-vue'
import 'bootstrap/dist/css/bootstrap.css'
import 'bootstrap-vue/dist/bootstrap-vue.css'
import  Popover  from 'bootstrap-vue/es/directives'
import 'https://mycompany/main.min.css'

Vue.use(BootstrapVue)
Vue.use(Popover)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue(
  el: '#app',
  store,
  router,
  template: '<App/>',
  components:  App 
)

我尝试通过大量在线帖子在 webpack.base.configexternalspublicPath)中找到一个位置 - 但没有回答了我的问题,足以让它发挥作用......

通过 CDN 传递的 css 文件本质上使用(并因此覆盖)引导程序类,因此需要将其注入到 after 引导程序中 - 我可以使用我当前的设置来执行此操作吗? Vue/Webpack .. 还是我需要像 Gulp 这样的任务运行器?一旦我们构建了项目并拥有了 dist 文件,仅仅注入 cdn 是不够的。我们需要在开发人员处理项目时查看样式的变化。 有没有比这两种方法更简单的方法,并且在任何人问之前 - 不..由于隐私/安全性,他们不会将其设为 npm 包。

【问题讨论】:

这听起来肯定违反了某种编码标准,对吧?另外,我认为我不清楚;所以修改了我的问题。我们需要在开发模式下处理项目时看到样式的变化,而不仅仅是使用 dist 文件构建。 【参考方案1】:

简单的方法是在所有其他样式之后将其包含在您的 index.html 中。 顺便说一句:你可以在 npm 上发布私有仓库。

【讨论】:

样式在应用程序构建时被注入 - 所以即使我确实把它放在 index.html 中,它也会是第一个,在它之后包含供应商样式(因此不会覆盖各种样式)。我们现在正在研究 npm 私人回购.. 但不确定他们是否会同意。这是希望!它也将有助于我们代码库的其他实现中的其他版本控制! 你的构建应用是一个 index.html 文件和一些 css + js + assets。我不明白为什么在头部末尾包含外部 CSS 不起作用?我假设您没有使用内联 css ? 如果你的意思是一旦建成,那不是我需要的:/我可能不清楚,会修改问题以适应。我需要开发人员在开发模式下运行项目时查看他们的风格变化,而不仅仅是在构建文件时使用它,并且只是在我想要的 index.html 中使用 cdn(这会更容易!)..跨度> 【参考方案2】:

一种方法是直接处理HtmlWebpackPlugin使用的模板。

首先在build/webpack.prod.conf中禁用inject

//...
new HtmlWebpackPlugin(
  //...
  inject: false,
  //...
)
//...

在你的index.html:

<!DOCTYPE html>
<html>

<head>
  <!-- ... -->
  <% if (process.env.NODE_ENV === 'production')  %>
    <% for (file of htmlWebpackPlugin.files.css)  %>
      <link rel="stylesheet" href="<%= file %>">
    <%  %>
    <link rel="stylesheet" href="https://mycompany/main.min.css">
  <%  %>
</head>

<body>
  <!-- ... -->
  <div id="app"></div>
  <% if (process.env.NODE_ENV !== 'production')  %>
    <!-- During development there's less of a problem with putting stylesheets in the body -->
     <link rel="stylesheet" href="https://mycompany/main.min.css">
  <%  else %>
    <% for (file of htmlWebpackPlugin.files.js)  %>
      <script src="<%= file %>" type="text/javascript"></script>
    <%  %>
  <%  %>
</body>

</html>

这样做是手动插入静态文件,因此您可以在生产中选择顺序。在开发过程中,链接是写在body标签中的,这样保持标准就没有太大问题了。

【讨论】:

我在某处读到了关于将样式放入组件中并最后导入的内容,但它没有实际意义,因为它需要使用 css @import,然后在其他所有内容之前编写。

以上是关于如何在 Vue cli 项目中使用 Webpack 包含我公司的全局样式 CDN(供开发人员使用)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue cli 项目中使用 Webpack 包含我公司的全局样式 CDN(供开发人员使用)?

vue-cli创建项目没有集成webpack相关配置的如何解决

如何在 vuejs webpack cli 项目中包含 jquery?

如何将 vue-cli 与同一个项目中现有的不相关 webpack 设置集成?

旧版vue-cli脚手架Webpack3项目如何升级Webpack4

如何将 SASS 文件添加到 bootstrap-vue/webpack(vue-cli 项目)?