React.js中npm run build时排除.js文件的可行方案咨询
解决React项目build时排除指定.js文件的问题
嗨,这个问题我之前也踩过坑!rm是Linux/macOS专属的命令,Windows系统自然识别不了它,给你几个简单的解决方案,按需选择就行:
方案1:用跨平台删除工具(最简单,零配置修改)
直接用跨平台的文件删除工具rimraf替代rm,它能在Windows、Linux、macOS下都正常工作:
- 先把rimraf装到开发依赖里:
npm install rimraf --save-dev
- 把package.json里的build脚本改成这样:
"build": "react-scripts build && rimraf build/config-local.js"
改完再跑npm run build,就能顺利删除目标文件了。
方案2:构建阶段直接排除(更优雅,避免“先打包再删除”)
如果不想多一步删除操作,直接让构建过程忽略这个文件会更合适,分两种场景:
场景A:文件在src目录下
要是config-local.js是你在src代码里引入的,那可以通过环境判断来跳过它的打包:
// 只在开发环境加载这个配置文件 if (process.env.NODE_ENV !== 'production') { import('./config-local.js'); }
React执行build时,NODE_ENV会自动设为production,这样这个文件就不会被打包进产物里了。
场景B:文件在public目录下
public目录下的文件默认会被完整复制到build文件夹,要排除它的话,可以用react-app-rewired来修改webpack配置(不用eject项目):
- 先装依赖:
npm install react-app-rewired customize-cra --save-dev
- 在项目根目录新建
config-overrides.js文件,写入:
const { override, adjustPublicFolder } = require('customize-cra'); module.exports = override( adjustPublicFolder(publicFolder => { // 过滤掉要排除的config-local.js publicFolder.copyWebpackPlugin.options.patterns = publicFolder.copyWebpackPlugin.options.patterns.filter(pattern => { return !/config-local\.js$/.test(pattern.from); }); return publicFolder; }) );
- 最后把package.json里的scripts改成:
"build": "react-app-rewired build"
这样build的时候,public里的config-local.js就不会被复制到产物里了。
方案3:eject后修改webpack配置(不推荐,除非你需要大量自定义)
如果你已经执行过eject命令暴露了配置文件,可以直接修改config/webpack.config.prod.js里的CopyWebpackPlugin配置,添加排除规则:
new CopyWebpackPlugin({ patterns: [ { from: path.resolve(__dirname, '../public'), to: path.resolve(__dirname, '../build'), globOptions: { ignore: ['**/config-local.js'], // 加入这行排除目标文件 }, }, ], }),
内容的提问来源于stack exchange,提问作者gouletf
相关产品推荐
相关产品推荐

