问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

请教如何通过PRD重建DEV

发布网友 发布时间:2022-04-23 02:26

我来回答

3个回答

懂视网 时间:2022-04-23 06:47

这次给大家带来从dev到prd使用详解,从dev到prd使用的注意事项有哪些,下面就是实战案例,一起来看一下。

本文用于学习新特性和总结开发必用plugin & loader,从dev到prd,走你~

Big changes

Environment

Node.js 4 is no longer supported. Source Code was upgraded to a higher ecmascript version.

Usage

You have to choose (mode or --mode) between two modes now: production or development

本次新版本中引入了 mode 配置项,开发者可在 none,development(开发 ) 以及 production(产品)三种模式间选择。该配置项缺省情况下默认使用 production 模式。

  1. development 模式给你极致的开发体验,包含浏览器调试相关工具,极快的增量编译,丰富全面的报错信息...

  2. production 模式则包含大量发版优化,代码压缩,丝般润滑的运行时优化,开发相关代码的排除,易用,etc.

  3. none 不使用预设,等于老版本中全部自己配置的原始状态。

eg:

webpack --mode development

Usage

  1. Some Plugin options are now validated

  2. CLI has been move to webpack-cli, you need to install webpack-cli to use the CLI

  3. The ProgressPlugin (--progress) now displays plugin names

  4. At least for plugins migrated to the new plugin system

新版中将 webpack 命令行工具拆分到单独的仓库中,所以需要额外安装 webpack-cli。

npm init -y //初始化项目
npm install webpack webpack-cli -D //安装webpack webpack-cli 依赖
npx webpack --mode development // npx可以直接运行node_modules/.bin目录下面的命令

或者通过配置package.json的script build

"scripts": {
 "build": "webpack --mode development",
},

加载loader方法总结

use

module: {
 rules:[
 { 
 test: /.css$/,
 use: ['style-loader','css-loader']
 }
 ]
}

css-loader用来解析处理CSS文件中的url路径,要把CSS文件变成一个模块

多个loader是有顺序要求的,从右往左写,因为转换的时候是从右往左转换

此插件先用css-loader处理一下css文件,再用style-loader把CSS文件变成style标签插入head中

loader

module: {
 rules:[
 {
 test: /.css$/,
 loader: ["style-loader", "css-loader"]
 },
 ]
}

use+loader

module: {
 rules:[
 {
 test: /.css$/,
 use:[
 { loader:"style-loader"},
 { 
 loader: 'css-loader',
 options: {sourceMap: true}
 }
 ]
 }
 ]
}

这三种loader的写法,最后打包的结果相同

loader中的options配置项可以用"?"跟在加载器后面

eg:

{ 
 test: /.jpeg$/, 
 use: 'url-loader?limit=1024&name=[path][name].[ext]&outputPath=img/&publicPath=output/', 
}

为以下配置的简写

{ 
 test: /.jpeg$/, 
 use: {
 loader:'url-loader',
 options:{
 limit:1024,
 name:[path][name].[ext],
 outputPath:img/
 publicPath:output/'
 }
 }
}

开发必备的loader&plugins

  1. css-loader

  2. babel-loader

讲ES6代码转换为ES5

{
 test: /.js/,
 use: {
 loader: 'babel-loader',
 query: {
 presets: ["env", "stage-0", "react"]
 }
 }
},

babel-loader的预设可以添加在query中,也可以在项目根目录添加 .babelrc 文件

.babelrc
{
 "presets": [
 "env",
 "stage-0",
 "react"
 ]
}

html-webpack-plugin

插件的基本作用就是生成html文件。原理很简单:

将 webpack中entry配置的相关入口thunk 和 extract-text-webpack-plugin抽取的css样式 插入到该插件提供的template或者templateContent配置项指定的内容基础上生成一个html文件,具体插入方式是将样式link插入到head元素中,script插入到head或者body中。

const HtmlWebpackPlugin = require('html-webpack-plugin');
new HtmlWebpackPlugin({
 template: './src/index.html',//指定产的HTML模板
 filename: `index.html`,//产出的HTML文件名
 title: 'index',
 hash: true,// 会在引入的js里加入查询字符串避免缓存,
 minify: {
 removeAttributeQuotes: true
 }
}),

可以用 cnpm search html-webpack-plugin 查找想用loader的用法

less-loader sass-loader

优化向prd进发

提取公共的css代码

它会将所有的入口 chunk(entry chunks)中引用的 *.css,移动到独立分离的 CSS 文件。因此,你的样式将不再内嵌到 JS bundle 中,而是会放到一个单独的 CSS 文件(即 styles.css)当中。 如果你的样式文件大小较大,这会做更快提前加载,因为 CSS bundle 会跟 JS bundle 并行加载。

npm i extract-text-webpack-plugin@next -D
const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin');
let cssExtract = new ExtractTextWebpackPlugin({
 filename: 'css/css.css',
 allChunks: true
});
module:{
 rules:[
 {
 test: /.css$/,//转换文件的匹配正则
 loader: cssExtract.extract({
 use: ["css-loader?minimize"]
 })
 },
 ]
}
plugins:[
 ...... ,
 + cssExtract
]

尽量减少文件解析,用resolve配置文件解析路径,include

rules: {
 test: /.js$/,
 loader:'babel-loader',
 include: path.resolve(dirname, 'src'),//只转换或者编译src 目录 下的文件
 exclude: /node_modules/ //不要解析node_modules
}

resolve.mainFields

WebpackTest
|
|
| - src
| | - index.js
|
| - lib
| | - fetch
| |
| browser.js
| node.js
| package.json
|
| - webpack.config.js

当从 npm 包中导入模块时(例如,引入lib下的库),此选项将决定在 package.json 中使用哪个字段导入模块。根据 webpack 配置中指定的 target 不同,默认值也会有所不同。

package.json

lib文件夹下的package.json中配置相对应模块的key

{
 "name": "fetch",
 "version": "1.0.0",
 "description": "",
 "node": "./node.js",
 "browser": "./browser.js",
 "scripts": {
 "test": "echo "Error: no test specified" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
}

webpack.config.js

在resolve解析对象中,加入lib的路径

resolve: {
 extensions: ['.js', '.json'],
 mainFields: ['main', 'browser', 'node'],
 modules: [path.resolve('node_modules'), path.resolve('lib')]
}

index.js

这样在index.js中引用第三方库时,会去查找modules下的路径中是否配置了所需的文件,知道在package.json中找到mainFields中的key对应文件,停止。

let fetch = require('fetch');
console.log(fetch);

打包后 console.log出的对象

如果交换mainFields中的key顺序

mainFields: ['main', 'node','browser']

打包后 console.log出的对象,因为找到了key=node对应的文件就停止了查找

DllReferencePlugin

这个插件是在 webpack 主配置文件中设置的, 这个插件把只有 dll 的 bundle(们)(dll-only-bundle(s)) 引用到需要的预编译的依赖。

新建webpack.react.config.js

const path = require('path');
const webpack = require('webpack')
module.exports = {
 entry: {
 react: ['react', 'react-dom']
 },
 output: {
 path: path.join(dirname, 'dist'),// 
输出动态连接库的文件名称 filename: '[name]_dll.js', library: '_dll_[name]'//全局变量的名字,其它会从此变量上获取到里面的模块 }, // manifest 表示一个描述文件 plugins: [ new webpack.DllPlugin({ name: '_dll_[name]', path: path.join(dirname, 'dist', 'manifest.json')//最后打包出来的文件目录和名字 }) ] }

在entry入口写入要打包成dll的文件,这里把体积较大的react和react-dom打包

output中的关键是library的全局变量名,下文详细说明dll&manifest工作原理

打包dll文件

webpack --config webpack.react.config.js --mode development

打包出来的manifest.json节选

打包出来的react_dll.js节选

可见manifest.json中的 name值就是

output:{
 library:_dll_react
}

manifest.json就是借书证,_dll_react就像图书馆书籍的条形码,为我们最终找到filename为react_dll.js的参考书

使用“参考书”

在webpack.config.js中加入“借书证”

new webpack.DllReferencePlugin({
 manifest: path.join(dirname, 'dist', 'manifest.json')
})

再运行

webpack --mode development

打包速度显著变快

打包后的main.js中,react,react-dom.js也打包进来了,成功~

import React from 'react';
//import ReactDOM from 'react-dom';
 (function(module, exports, webpack_require) {
"use strict";
eval("

//import name from './base';
//import React from 'react';
//import ReactDOM from 'react-dom';
//import ajax from 'ajax';
//let result = ajax('/ajax');

//ReactDOM.render(<h1>{result}</h1>, document.getElementById('root'));
// fetch fetch.js fetch.json fetch文件夹
//let fetch = require('fetch');
//console.log(fetch);
//let get = require('../dist/bundle.js');
//get.getName();
console.log('hello');

var name = 'zfpx';
console.log(name);
if (true) {
 var s = 'ssssssssssssssssssssssss';
 console.log(s);
 console.log(s);
 console.log(s);
 console.log(s);
}

//# sourceURL=webpack:///./src/index.js?");
/***/ })
/******/ });

未完待续

  1. webpack.ProvidePlugin

  2. 拷贝静态资源

  3. 压缩css(npm i -D purifycss-webpack purify-css)

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

webpack中dev-server使用步骤详解

Angular2中如何使用Dom

热心网友 时间:2022-04-23 03:55

做系统COPY可能要好于EXPORT,因为有些表结构可能不一致。在以后Client copy也有会可能有一 些。 ....... I disagree both way. You should clean up the DEV via R3load export and import. 1. prd -> dev client copy, unless you dev original sizing is the same as prd. else most dev system don't have enough disk for proction client data 2. system copy, Prd to dev will overlap all configuration and you have to change the source system. It's not good idea if you never do this before. If you want to do it, recommend do the test ?on the other system(sand box) first or backup your DEV. Else, you will cry.... 查看原帖>>

热心网友 时间:2022-04-23 05:13

不赞成用系统copy方式重新作
开发机里应该有大量的不成熟开发代码,也许以后会用到,而生产机是没有的,系统copy会丢失
这部分内容,不要把开发机当测试机使用,即使作测试机,你也要考虑它的主要作用是开发,所
以还是建议你做
client
export/import
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 已经买到火车票了去坐火车时还用刷身份证吗? 宁波做网站哪家好? 宁波网站建设方法 宁波网站建设哪里好 宁波网站模板哪家速度快 用啥办法将PRD copy 到 DEV 水鱼的功效 治风湿性关节炎的方法 怎样治风湿性关节炎 安卓手机屏幕坏了同时没开usb调试,怎么导出机身内存的资料? 阿里云怎么开usb调试模式 未开usb调试如何导出文件,密码忘记了,或者破译密码保留数据也行?_百 ... 如何恢复缓存数据? usb调试好后,怎么保存 我想知道糖果色抹胸连体裤在哪里买? 网上哪里买连衣裙抹胸雪纺好? 这个牛仔抹胸短裙是哪里买的 什么牌子 怎么没有aa杯文胸,要去哪里买呢? 上海哪里有比较好的礼服或抹胸型的连衣裙买,比较好的,性价比高的 什么抹胸啊? 柳州螺蛳粉和桂林米粉… 桂林米粉和柳州螺蛳粉的区别,我是河南 的哪种米粉更适合河南人口味? 螺蛳粉和桂林米粉哪个好吃点,哪个受欢迎多一点 三开门冷藏柜哪个品牌的好 三开门冷藏柜哪个牌子好,价格多少钱 三开门冷藏展示柜门怎么调节 家里三门冰箱上格冷藏柜不冷中格和下格冷冻的能制冷,压缩机工作,不知什么原因? 安琪儿冷藏柜怎么样?可否告知一下? 怎么减掉胃上的肉? 胃部的肥肉比较多,怎样减肥 怎样瘦胃部的肉肉 为什么我胃上的肉老多怎么减下去 胃和肚子那一块的肉要怎么减? 肚子和胃上面的肉肉怎么减掉? 怎么减去胃部上的肉肉? 肚子和胃上的坠肉怎么减 关于新加QAS系统,如何把DEV的请求导入 向日葵油有什么作用? 荒野的召唤银峰岭任务,外科医生的检查棚屋是在哪儿? 荒野的召唤06号图是哪里