# 编译构建项目无法排除某些目录打包怎么处理

#### 问题现象

当开启release编译构建，开启从入口文件开始编译，构建闭源HAR时，编译构建指定模块时无法排除该模块中的某些文件。项目结构示例如下，按照以下3项步骤，工程中的test模块中/src/main/ets/com/test/test.ts应该不会被打包进test.har包，但是实际test.ts文件仍然还是会被打包。

1.  首先启用release编译构建；
2.  hvigor-config.json5中ohos.compile.lib.entryfile为true，开启从入口文件开始编译；
3.  模块下的build-profile.json5中buildOptionSet.arkOptions.obfuscation.ruleOptions.enable为true，构建闭源HAR。
    

#### 解决方案

当编译构建需要排除某些目录或文件时，需要配置.ohpmignore文件，并且还要明确该目录或文件是否被引用。

**1\. 配置.ohpmignore文件：**

若部分工程源文件无需构建到HAR包中，可在module目录下新建.ohpmignore文件，用于配置打包时要忽略的文件，将无需打包进HAR包的文件/文件夹名称写入.ohpmignore文件中。DevEco Studio构建时将过滤掉.ohpmignore文件中所包含的文件目录。

需注意：更改.ohpmignore配置后，需要清空相应模块的build文件夹，或点击DevEco Studio的Build -> clean project后再打包。

**2\. 编译构建：**

当开启release编译构建，开启从入口文件开始编译，构建闭源HAR时，存在引用和不引用test.ts两种情况：

a. 如果test文件被其他地方引用了，test.har编译结果如下，发现包含test文件：

b. 如果test文件没有被引用，test.har编译结果如下，此时不包含test文件：

#### 总结

当开启release编译构建，开启从入口文件开始编译，构建闭源HAR时，.ohpmignore文件中配置的文件或目录如果被其他地方引用了，则会被打包，如果未被引用，则不会被打包。