当前位置: 首页 > 后端技术 > Node.js

自动化构建项目中的文件操作

时间:2023-04-03 20:59:00 Node.js

读写文件fs;pathvarfs=require('fs');varpath=require('path');//__dirname:全局变量,存放文件所在的文件目录//path.resolve:放一个路径或者一个序列路径片段解析为绝对路径。//读取文件varreadFile=fs.readFileSync(path.resolve(__dirname,'../../src/test.js'),'utf8');varjsonObject=JSON.parse(readFile);//写入文件fs.writeFile(path.resolve(__dirname,'../../dist/dist.js'),JSON.stringify(jsonObject));通过postcss解析文件postcssvarpostcss=require('postcss');varfs=require('fs');varpath=require('path');varfontFile=fs.readFileSync(path.resolve(__dirname,'../../packages/theme-chalk/src/icon.scss'),'utf8');varnodes=postcss.parse(fontFile).nodes;varclassList=[];nodes.forEach((node)=>{varselector=node.selector||'';varreg=newRegExp(/\.el-icon-([^:]+):before/);vararr=selector.match(reg);if(arr&&arr[1]){classList.push(arr[1]);}});fs.writeFile(path.resolve(__dirname,'../../examples/icon.json'),JSON.stringify(classList));使用json-templater和uppercamelcase作为模板字符字符替换和驼峰大小写规范uppercamelcaseusageinstanceconstupperCamelCase=require('uppercamelcase');upperCamelCase('foo-bar');//=>FooBarupperCamelCase('foo_bar');//=>FooBarupperCamelCase('Foo-Bar');//=>FooBarupperCamelCase('--foo.bar');//=>FooBarupperCamelCase('__foo__bar__');//=>FooBarupperCamelCase('foobar');//=>FooBarconsole.log(process.argv[3]);//=>--foo-barupperCamelCase(process.argv[3]);//=>FooBarupperCamelCase('foo','bar');//=>'FooBar'upperCamelCase('__foo__','--bar');//=>'FooBar'j??son-templater和uppercamelcase组合使用实例varComponents=require('../../components.json');varfs=require('fs');varrender=require('json-templater/string');varuppercamelcase=require('uppercamelcase');varpath=require('path');/**一个字符串常量,定义操作系统特定的行尾标志:\n在POSIX系统上\r\n在Windows系统上**/varendOfLine=require('os').EOL;varOUTPUT_PATH=path.join(__dirname,'../../src/index.js');varIMPORT_TEMPLATE='从\'../导入{{name}}packages/{{package}}/index.js\';';varINSTALL_COMPONENT_TEMPLATE='{{name}}';varMAIN_TEMPLATE=`/*由'./build/bin/build-entry.js'自动生成*/{{include}}从'element-ui/src/locale'导入语言环境;从'element-ui/src/transitions/collapse-transition'导入CollapseTransition;constcomponents=[{{install}},CollapseTransition];constinstall=function(Vue,opts={}){locale.use(opts.locale);locale.i18n(opts.i18n);components.map(component=>{Vue.component(component.name,component);});Vue.use(Loading.directive);常量元素={};ELEMENT.size=opts.size||'';Vue.prototype.$loading=Loading.service;Vue.prototype.$msgbox=MessageBox;Vue.prototype.$alert=MessageBox.alert;Vue.prototype.$confirm=MessageBox.confirm;Vue.prototype.$prompt=MessageBox.prompt;Vue.prototype.$notify=通知;Vue.prototype.$message=消息;Vue.prototype.$ELEMENT=ELEMENT;};/*istanbulignoreif*/if(typeofwindow!=='undefined'&&window.Vue){install(window.Vue);};module.exports={version:'{{version}}',locale:locale.use,i18n:locale.i18n,安装,CollapseTransition,加载,{{list}}};module.exports.default=module.exports;`;deleteComponents.font;varComponentNames=Object.keys(Components);varincludeComponentTemplate=[];varinstallTemplate=[];varlistTemplate=[];ComponentNames.forEach(name=>{varcomponentName=uppercamelcase(name);includeComponentTemplate.push(render(IMPORT_TEMPLATE,{name:componentName,package:name}));if(['Loading','MessageBox','Notification','Message'].indexOf(componentName)===-1){installTemplate.push(render(INSTALL_COMPONENT_TEMPLATE,{name:componentName,component:name}));}if(componentName!=='正在加载')listTemplate.push(`${componentName}`);});vartemplate=render(MAIN_TEMPLATE,{include:includeComponentTemplate.join(endOfLine),安装:installTemplate.join(','+endOfLine),版本:process.env.VERSION||require('../../package.json').version,列表:listTemplate.join(','+endOfLine)});fs.writeFileSync(OUTPUT_PATH,template);console.log('[buildentry]完成:',输出路径);