美文网首页
初识脚手架

初识脚手架

作者: Leonard被注册了 | 来源:发表于2019-12-06 19:58 被阅读0次

React脚手架

  • 全局安装脚手架:npm install create-react-app -g

  • 创建项目:create-react-app [项目名称]
    注意:项目名称中不能出现:大写字母、中文汉字、特殊符号(-或者_是可以的)等

  • 生成目录

    |- node_modules
      |- bin   // 本地项目中可执行命令,在package.json中设置对应脚本即可
      |- ...   // 对应模块
    |- public  // 存放当前项目的HTML页面
    |- src     // 项目结构中最主要的目录,因为后期所有的JS、路由、组件等都是放到这里面(包括需要编写的CSS或者图片等)
    |- .gitignore  // Git提交时候的忽略提交文件配置项
    |- package.json  // 项目清单,含有三个模块:react/react-dom/react-scripts
    |- ...
    

    注意react-scripts集成了webpack需要的内容,但没有less/sass的处理内容,如需使用要自行安装

  • 加载资源文件的两种方法
    1.在JS中基于ES6 Module模块规范,使用import导入,这样webpack在编译合并JS的时候,会把导入的资源文件等插入到页面的结构中(绝对不能在JS管控的结构中通过相对目录导入资源,因为在webpack编译的时候,地址就不再是之前的相对地址了)
    2.如果不想在JS中导入(JS中导入的资源最后都会基于WEBPACK编译),我们也可以把资源手动地在HTML中导入,但是HTML最后也要基于WEBPACK编译,导入的地址也不建议写相对地址,而是使用 %PUBLIC_URL%写成绝对地址


脚手架深入学习

我们发现,create-react-app脚手架为了让结构目录清晰,把安装的webpack及配置文件都集成在了react-scripts模块中,放到了node_modules中,因此需要在脚手架默认安装的基础上,额外安装一些我们需要的模块的时候要分两种情况进行处理

  • 情况一:如果我们安装的其它组件,安装成功后不需要修改webpack的配置项,此时我们直接安装,并且调取使用即可

  • 情况二:我们安装的插件是基于webpack处理的,也就是需要把安装的模块配置到webpack中(重新修改webpack配置项)

要修改webpack配置项的话首先需要把隐藏到node_modules中的配置项暴露到项目中

  • yarn eject执行这一操作将配置项暴露出来,需要注意的这个操作是不可逆转的,一但暴露出来配置项,就无法再隐藏回去
  • 接着再对配置项进行修改即可,这里以less作为例子
    1.先下载模块和加载器
    yarn add less less-loader
    2.暴露webpack配置项
    yarn eject
    3.找到webpack.config.js修改配置(找到以下三处并进行修改)
    // style files regexes
    const cssRegex = /\.css$/;
    const cssModuleRegex = /\.module\.css$/;
    const sassRegex = /\.(scss|sass)$/;
    const sassModuleRegex = /\.module\.(scss|sass)$/;
    // 添加以下代码
    const lessRegex = /\.less$/;
    const lessModuleRegex = /\.module\.less$/;
    
     // common function to get style loaders
      const getStyleLoaders = (cssOptions, lessOptions, preProcessor) => {
          const loaders = [
          isEnvDevelopment && require.resolve('style-loader'),
          isEnvProduction && {
              loader: MiniCssExtractPlugin.loader,
              options: shouldUseRelativeAssetPaths ? { publicPath: '../../' } : {},
          },
          {
              loader: require.resolve('css-loader'),
              options: cssOptions,
          },
      // 添加以下代码,别忘了在该函数形参列表中添加lessOptions
          {
              loader: require.resolve('less-loader'),
              options: lessOptions,
          },
    
    {
          test: cssRegex,
          exclude: cssModuleRegex,
          use: getStyleLoaders({
            importLoaders: 1,
            sourceMap: isEnvProduction && shouldUseSourceMap,
          }),
          // Don't consider CSS imports dead code even if the
          // containing package claims to have no side effects.
          // Remove this when webpack adds a warning or an error for this.
          // See https://github.com/webpack/webpack/issues/6571
            sideEffects: true,
          },
          // Adds support for CSS Modules (https://github.com/css-modules/css-modules)
          // using the extension .module.css
          {
             test: cssModuleRegex,
             use: getStyleLoaders({
                  importLoaders: 1,
                  sourceMap: isEnvProduction && shouldUseSourceMap,
                  modules: true,
                  getLocalIdent: getCSSModuleLocalIdent,
             }),
          },
          // 添加以下代码
          {
              test: lessRegex,
              exclude: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 1,
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                },
                'less-loader'
              ),
              sideEffects: true,
            },
            {
              test: lessModuleRegex,
              use: getStyleLoaders(
                {
                  importLoaders: 1,
                  sourceMap: isEnvProduction
                    ? shouldUseSourceMap
                    : isEnvDevelopment,
                  modules: true,
                  getLocalIdent: getCSSModuleLocalIdent,
                },
                'less-loader'
              ),
            },
    

相关文章

网友评论

      本文标题:初识脚手架

      本文链接:https://www.haomeiwen.com/subject/tqeegctx.html