Jenkins共享库中如何在流水线脚本引用外部React组件的路径?
在React项目中使用Jenkins共享库时遇到路径问题,流水线脚本里引用组件总报错。我按以下方式写了组件引入:
import Header from './components/Header';
const App = () => (
<div>
<Header title="共享库测试"/>
<p>构建信息:{process.env.BUILD_NUMBER}</p>
</div>
);
export default App;
但运行时提示Cannot find module './components/Header'。已经确认文件结构没问题,Jenkinsfile里用了相对路径,也试过绝对路径都不行。是不是共享库的加载机制有特殊要求?应该怎么配置才能让流水线正确解析组件路径?
首先需要把你的React组件打包成一个可分发的形式,比如使用webpack打包成UMD格式。这样可以生成一个独立的bundle.js文件。
然后在Jenkinsfile中通过artifacts方式来管理这些静态资源文件。别忘了配置正确的workspace路径。
最后在需要使用的地方通过script标签引入这个打包好的bundle.js,而不是试图用import语法。毕竟Jenkins的执行环境对Node模块系统支持有限,容易出各种奇怪问题。
这确实有点麻烦,但按规范来做最稳妥。折腾这些构建工具时总感觉时间过得特别快,一眨眼就加班了。
你在Jenkinsfile里写的nodejs构建脚本是不是漏了build步骤?React组件路径问题是你本地开发时的模块解析问题,跟Jenkins共享库没关系。共享库是用来放pipeline逻辑的,不是用来放React组件的。
你上面那段代码是React组件,应该在你的React项目里,而不是在Jenkinsfile里。Jenkinsfile里要写的是怎么构建这个React项目,比如:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}
如果你真想在Jenkins共享库中引用React组件,那你得在共享库中配置npm支持,然后把React项目发布为npm包,再通过npm install来引入。直接用这个流程:
把React组件打包成npm包
在Jenkins共享库的package.json里加上这个包的依赖
在你需要的地方import * as Header from 'your-react-component'
共享库的加载机制没有特殊要求,是你用了错误的引入方式。你现在的写法是前端代码的引入方式,不是Node.js模块引入方式。