didi / chameleon

🦎 一套代码运行多端,一端所见即多端所见
http://cml.didi.cn/
Apache License 2.0
9.02k stars 692 forks source link

chameleon.config.js 设置webpack noParse 无效 #503

Open lanxiaojing opened 3 years ago

lanxiaojing commented 3 years ago

bug描述 在chameleon.config.js中按文档 设置webpack noParse 配置无效。

复现bug的步骤

  1. 在chameleon.config.js修改webpackConfig如下图,最后生成的文件中还是处理了文件里的require

问题截图 chameleon.config.js中: image

// 原始文件中的require image

// 生成的static/js/common.js中还是会处理noParse设置的require image

编译环境信息

运行环境信息

jimwmg commented 3 years ago

webpack关于 noParse的解释 module.noParse 防止 webpack 解析那些任何与给定正则表达式相匹配的文件。忽略的文件中不应该含有 import, require, define 的调用,或任何其他导入机制。忽略大型的 library 可以提高构建性能。

回调增加配置

cml.utils.plugin('webpackConfig', function({ type, media, webpackConfig }, cb) {
  // cb函数用于设置修改后的配置
  webpackConfig.module.noParse = function(content){
    return /test-noparse/.test(content) //测试工程化配置 noParse是否生效
  }
  cb({
    type,
    media,
    webpackConfig
  });
});

文件引用

import './test-noparse.js'

这里我简单加了一个测试案例:test-noparse.js 文件引用的 m1.js 文件,

test-noparse.js

console.log('no-parse');
const m1 = require('./m1.js')

m1.js

module.exports = {
  name:"module1"
}

打包后代码

/***/ "./src/pages/index/test-noparse.js":
/***/ (function(module, exports) {

console.log('no-parse');
var m1 = require('./m1.js');

/***/ }),

全部demo参见:https://github.com/chameleon-team/cml-web-multipage

注释掉配置,关闭终端,重新构建对比效果

webpackConfig.module.noParse = function(content){
    // return /test-noparse/.test(content) //测试工程化配置 noParse是否生效
  }

查看构建后代码

/***/ "./src/pages/index/test-noparse.js":
/***/ (function(module, exports, __webpack_require__) {

console.log('no-parse');
var m1 = __webpack_require__("./src/pages/index/m1.js");

/***/ }),