一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第29天,点击查看活动详情。
jenkins创建应用
1.登录到jenkins,选择新建任务,先创建一个文件夹
2.创建文件夹,并进行配置,使用默认配置即可
3.进入文件夹,然后新建item
4.新建item,然后选择构建一个自由风格的软件项目。
5.配置General
6.源码管理
7.构建,选择执行shell
8.保存,立即构建
jenkins问题处理
1.Module not found: Error: Can't resolve '../EventDemo'
出现这样的问题,你得查看你的代码引入EventDemo这个,有无大小写的区分!!!
就是说,你的文件名是eventDemo,但是你引入这个文件的时候,用的是import EventDemo from '../EventDemo'(大写),这个是有问题的!!!
为什么呢?
是因为在window下,是不区分大小写的。但是在linux下,是区分大小写的,这是个恶心的问题!!!
所以这里得改成这样:import EventDemo from '../eventDemo'
2.入口entry的main.js,扫描会有问题
function getEntries() {
const pagesPath = path.resolve('./src/pages')
var result = fs.readdirSync(path.resolve('./src/pages'))
var entry = {};
result.forEach(item => {
entry[item] = `./src/pages/${item}/main.js`
})
return entry
}
为什么上面的会有问题呢?
因为我们的代码,一般是通过git或者svn进行管理,jenkins是通过拉取这些仓库上面的代码,进行构建打包的。
那就会有下面的代码结构:
会for循环,去找src/pages下面的文件夹,然后找里面的main.js文件。
那么就会找.svn文件夹下面的main.js,可是这里面是没有的,那不就完蛋了嘛?直接构建失败了呀!!!
所以这里得忽略这个文件夹的扫描:如下修改即可
function getEntries() {
const pagesPath = path.resolve('./src/pages')
var result = fs.readdirSync(path.resolve('./src/pages'))
var entry = {};
result.forEach(item => {
//忽略svn的扫描
if(item.indexOf('svn')>=0){
return;
}
entry[item] = `./src/pages/${item}/main.js`
})
return entry
}
3. Can't resolve 'baidutemplate'
一看到这个问题,我们就联想到问题1,是不是大小写的问题呢?
但好像不是,模块的名称,确实是baidutemplate。
然后,去看一下该baidutemplate模块的内容,如下:
那就分析一下了:我们引用是这样的:
import baidu from 'baidutemplate'
这样在window下面,运行打包,是没有问题的。
为什么在Jenkins(linux)上打包,就有问题?
我们可以看到baidutemplate模块的内容,这里就一个实用的js文件baiduTemplate.js。
那会不会是这样:
import baidu from 'baidutemplate'其实就相当于import baidu from 'baidutemplate/baidutemplate'。
那这个在window(不区分大小写)下是没有问题,在Linux(区分大小写)下,就不行了!!!
那我们来改一下,改成这样:
import baidu from 'baidutemplate/baiduTemplate'
好了,Jenkins试一下打包!!!
测试无问题,问题解决!!!
4.JavaScript heap out of memory
出现这个错,咋们第一时间,肯定是会想到oom堆内存不够了。
- 网上大多数的做法,都是这样改:
编译使用的是 vue-cli-service 执行的编译。
我们在node_modules 的 .bin 目录找到 vue-cli-service.cmd 文件。
window下这么改,是没啥问题。
可问题来了,在linux上,这个文件vue-cli-service.cmd和window下,是完全不一样的。
- linux下,
vue-cli-service是这样的
#!/usr/bin/env node
const semver = require('semver')
const { error } = require('@vue/cli-shared-utils')
const requiredVersion = require('../package.json').engines.node
if (!semver.satisfies(process.version, requiredVersion)) {
error(
`You are using Node ${process.version}, but vue-cli-service ` +
`requires Node ${requiredVersion}.\nPlease upgrade your Node version.`
)
process.exit(1)
}
const Service = require('../lib/Service')
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
const rawArgv = process.argv.slice(2)
const args = require('minimist')(rawArgv, {
boolean: [
// build
'modern',
'report',
'report-json',
'inline-vue',
'watch',
// serve
'open',
'copy',
'https',
// inspect
'verbose'
]
})
const command = args._[0]
service.run(command, args, rawArgv).catch(err => {
error(err)
process.exit(1)
})
那完全不知道怎么改了,一时之间,头有点蒙。
它和window下的,完全不一样的。网上也找不到,如何对上面的代码进行修改。
网上找了,有很多种解决方式,有些要安装依赖;有些要修改某些文件;
可最终的效果,都不咋地,并不能很友好的解决这个问题!!!
最终找到了一种,修改地方很少的方式!!!
最终的解决方式如下:
export NODE_OPTIONS="--max-old-space-size=8192"
npm install
npm run build
好了,Jenkins试一下打包!!!
测试无问题,问题解决!!!
今天就先到这里了,溜了溜了溜了!!!^_^
觉得有收获的,帮忙点个赞呗!!!