vue-cli2+webpack构建的vue项目如何让图片和js等静态资源走cdn,哪里可以配置呢?下面我详细介绍

1.config/index.js中可以看到

module.exports = {
dev: {...}, build: {
assetsSubDirectory: 'static',
assetsPublicPath: '/',
}

dev相对于本地开发调试用的,build对于发布环境

其中assetsPublicPath就是配置静态资源的cdn,我们可以再这里配置我们对应的cdn路径,比如:

assetsPublicPath: 'https://baidu.com/',

2.当然如果只有一个环境,我们只需要assetsPublicPath里面写死就行,但是我们往往有多个环境,比如测试、预发布、开发等等,那如何配置呢?
  首先我们区分当前运行的是那个环境,node。js命令是可以带参数的,所以我们只要再编译的命令带上环境的参数就可以了,对于vue有一个专门
对于环境发布的依赖,参考:http://www.likecs.com/show-61513.html

一、安装依赖:cross-env

使用cross-env解决跨平台设置环境变量的问题

安装:npm i --save-dev cross-env

二、修改项目package.json文件

"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"lint": "eslint --ext .js,.vue src --fix",
"build:dev": "cross-env NODE_ENV=development ENV_CONFIG=dev node build/build.js",
"build:test": "cross-env NODE_ENV=testing ENV_CONFIG=test node build/build.js",
"build:pre": "cross-env NODE_ENV=presentation ENV_CONFIG=pre node build/build.js",
"build:prod": "cross-env NODE_ENV=production ENV_CONFIG=prod node build/build.js"
},

如图所示

这里是修改打包命令,以后打包将使用以下命令:

线上开发环境:npm run build:dev
线上测试环境:npm run build:test
线上预发环境:npm run build:pre
线上生产环境:npm run build:prod
NODE_ENV=xxx ENV_CONFIG=xxx 将设置 webpack 打包时的 NODE_ENV、 ENV_CONFIG 环境变量

三、修改项目config配置文件

修改项目config目录下的以下文件

1、 添加test.env.js文件

'use strict'
module.exports = {
NODE_ENV: '"testing"',
ENV_CONFIG: '"test"',
API_ROOT: '"http://(线上测试环境请求地址)"'
}

2、添加pre.env.js文件

'use strict'
module.exports = {
NODE_ENV: '"presentation"',
ENV_CONFIG: '"pre"',
API_ROOT: '"http://(线上预发环境请求地址)"'
}

3、修改dev.env.js文件

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env') // 命令行中获取的NODE_ENV参数
const env = process.env.NODE_ENV module.exports = merge(prodEnv, {
NODE_ENV: '"development"',
ENV_CONFIG: '"dev"',
API_ROOT: env === 'development' ? '"http://(线上开发环境请求地址)"' : '"/api"' // dev环境配制了服务代理,API_ROOT的api是配制的代理地址
})

4、修改prod.env.js文件

'use strict'
module.exports = {
NODE_ENV: '"production"',
ENV_CONFIG: '"prod"',
API_ROOT: '"http://(线上生产环境请求地址)"'
}

5、修改index.js文件

由于本地运行时会产生浏览器跨域的问题,在此文件中配置服务代理。

dev参数下修改如下配置:

proxyTable: {
'/api': {
target: 'http://(本地开发环境请求地址)',
changeOrigin: true, // 是否允许跨域
pathRewrite: {
'^/api': '' // 重写
}
},
},

// api是配制的代理地址

如下图所示

build参数下添加如下参数

devEnv: require('./dev.env'),
testEnv: require('./test.env'),
preEnv: require('./pre.env'),
prodEnv: require('./prod.env'),

参数名与文件名对应,此处参数将在 build/webpackage.prod.conf.js 中使用到

将 build 参数下的 assetsPublicPath 参数值修改为 ’./’

如下图所示

config目录结构如图

四、修改项目build配置文件

修改项目build目录下的以下文件

1、 修改build.js文件

// process.env.NODE_ENV = 'production'  // 将此行代码注释

// const spinner = ora('building for production...')
const spinner = ora('building for ' + process.env.NODE_ENV + ' of ' + process.env.ENV_CONFIG + ' production...')

如图所示

2、修改utils.js文件

添加各打包环境设置,也可以不改动,将 package.json 文件中的打包命令

cross-env NODE_ENV=xxx ENV_CONFIG=xxx node build/build.js

中的参数 NODE_ENV=xxx 都设为 NODE_ENV=production

原代码
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory return path.posix.join(assetsSubDirectory, _path)
} 修改后
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'presentation'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory return path.posix.join(assetsSubDirectory, _path)
}

这里涉及到打包和本地运行时所读取的config/index.js文件中的assetsSubDirectory参数路径

3、修改webpack.base.conf.js文件

添加各打包环境设置,也可以不改动,将package.json文件中的打包命令

cross-env NODE_ENV=xxx ENV_CONFIG=xxx node build/build.js

中的参数 NODE_ENV=xxx 都设为 NODE_ENV=production

原代码
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
}, 修改后
output: {
path: config.build.assetsRoot,
filename: '[name].js',
publicPath: process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'testing' || process.env.NODE_ENV === 'presentation'
? config.build.assetsPublicPath
: config.dev.assetsPublicPath
},

4、修改webpack.prod.conf.js文件

原代码
const env = require('../config/prod.env') 修改后
const env = config.build[process.env.ENV_CONFIG+'Env']

如图所示

将会根据各打包环境设置的参数选择读取 config/index.js 文件下 build 参数中设置的环境配置参数,从而读取到 config 目录下配置的各打包环境的js文件

五、项目中HTTP请求设置

注意符号不是单引号而是反引号

本项目中所有请求统一在api文件中管理,在js文件中获取到各环境配置的请求地址将其添加到请求路径中。

如果是直接在文件中调用可将请求地址参数挂载到Vue上进行全局调用

在main.js文件中添加

Vue.prototype.baseURL = process.env.API_ROOT

使用时请求路径参数为

url: `${this.baseURL}/platform/systemUser/login`

六、配置相当于环境cdn

再config/index.js增加如下判断:

let cdn_path = './'
if (process.env.ENV_CONFIG === 'dev') {
cdn_path = 'https://dev-baidu.com/dev/wx/';
} else if (process.env.ENV_CONFIG === 'prod') {
cdn_path = 'https://baidu.com/prod/wx/';
}
else if (process.env.ENV_CONFIG === 'test') {
cdn_path = 'https://test-baidu.com/test/wx/';
}
else if (process.env.ENV_CONFIG === 'pre') {
cdn_path = 'https://pre-baidu.com/pre/wx/';
} build: {
...
assetsPublicPath: cdn_path,
}

按照上面的步骤就可以完美解决多环境的配置了。

vue+vue-cli2+webpack配置资源cdn的更多相关文章

  1. vue项目实战, webpack 配置流程记录

    vue项目实战记录,地址在这 购物车单界面 npm install npm run dev 跑起来可以看到界面效果 这里简单记录一下webpack的编译流程 入口 package.json " ...

  2. storybook配置之基本配置和webpack配置

    默认配置 Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他类似于创建一个react app的配置,并经过调整(tweaked ),使其 ...

  3. 对vue中 默认的 config/index.js:配置的详细理解 -【以及webpack配置的理解】-config配置的目的都是为了服务webpack的配置,给不同的编译条件提供配置

    当我们需要和后台分离部署的时候,必须配置config/index.js: 用vue-cli 自动构建的目录里面  (环境变量及其基本变量的配置) var path = require('path') ...

  4. @vue/cli 3.x项目脚手架 webpack 配置

    @vue/cli  是一个基于 Vue.js 进行快速开发的完整系统. @vue/cli   基于node服务  需要8.9以上版本 可以使用 nvm等工具来控制node版本  构建于 webpack ...

  5. vue项目之webpack打包静态资源路径不准确

    摘自:https://blog.csdn.net/viewyu12345/article/details/83187815 问题 将打包好的项目部署到服务器,发现报错说图片找不到. 静态资源如js访问 ...

  6. webpack 配置 Vue 多页应用 —— 从入门到放弃

    webpack 配置 Vue 多页应用 -- 从入门到放弃 一直以来,前端享有无需配置,一个浏览器足矣的优势,直到一大堆构建工具的出现,其中 webpack 就是其中最复杂的一个,因此出现了一个新兴职 ...

  7. 前端笔记之Vue(一)初识SPA和Vue&webpack配置和vue安装&指令

    一.单页面应用(SPA) 1.1 C/S到B/S页面架构的转变 C/S:客户端/服务器(Client/Server)架构的软件. C/S 软件的特点: ① 从window桌面双击打开 ② 更新的时候会 ...

  8. vue全家桶安装以及修改webpack配置新增vue项目启动方式

    一.安装node环境(自带npm) 下载地址 二.替换下载源 // 淘宝 NPM 镜像 npm install -g cnpm --registry=https://registry.npm.taob ...

  9. 使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)

    使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development.production) --mode 指定环境模式 ...

随机推荐

  1. 如何将自己的代码上传至github

    前提条件: 有个github账号,电脑安装了git; 首先在自己的账号里新建一个仓库: https://github.com/qiqi105/littleAlbum.git 进入到你要上传的文件夹内部 ...

  2. 2019HDU多校训练第二场 Longest Subarray

    题意:给你一个串,问满足以下条件的子串中最长的是多长:对于每个数字,要么在这个子串没出现过,要么出现次数超过k次. 思路:对于这类问题,常常转化为数据结构的询问问题.我们考虑枚举右端点,对于当前右端点 ...

  3. Codeforces 961E - Tufurama 树状数组

    转自:https://blog.csdn.net/my_sunshine26/article/details/79831362 题目大意: i从1开始 基本思路: 完全没思路,所以上来就二分,果不其然 ...

  4. boost库:函数对象

    函数对象是指那些可以被传入到其它函数或是从其它函数返回的一类函数. 1. boost::bind bind提供了一个机制,是函数与几乎不限数量的参数一起使用,就可以得到指定签名的函数.bind会复制传 ...

  5. SPOJ - VLATTICE (莫比乌斯反演)

    Consider a N*N*N lattice. One corner is at (0,0,0) and the opposite one is at (N,N,N). How many latt ...

  6. configure: error: libXpm.(a|so) not found

    libXpm-devel明明已经安装过了,libXpm.so之类的也都存在,但是还是一直报这个问题, 百度了很长时间,终于找到了: configure一般的搜索编译路径为/usr/lib/下,因为ph ...

  7. windows 下redis在后台运行

    打开命令终端,cd进入redis目录 安装redis服务:redis-server --service-install redis.windows.conf --loglevel verbose re ...

  8. Python每日一题 004

    将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...

  9. python实现人民币大写转换

    问题描述: 银行在打印票据的时候,常常需要将阿拉伯数字表示的人民币金额转换为大写表示,现在请你来完成这样一个程序. 在中文大写方式中,0到10以及100.1000.10000被依次表示为: 零 壹 贰 ...

  10. gokit 统计分析 M2M接入服务 OTA固件升级 硬件社交化

    统计分析 M2M接入服务  OTA固件升级 硬件社交化 统计分析 为智能硬件定制的统计分析服务.只需添加入一行代码的集成工作,多维度的设备使用和用户行为数据就能自动统计出来. 演示 特色一:设备上线情 ...