Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

taro-cli 无法指定可编译的目录,node_modules 无法进行编译。 #871

Closed
1021683053 opened this issue Oct 18, 2018 · 17 comments
Closed
Assignees
Labels
enhancement New feature or request

Comments

@1021683053
Copy link
Contributor

问题描述
taro-cli 无法指定可编译的目录,当前状态比较混乱,
1, node_modules 不进行编译。
2,node_modules/taro-ui/dist 文件夹下的文件确可以编译

这里想问,什么逻辑?为何不能指定呢?

复现步骤
es6文件放在
node_modules文件夹下,项目引用文件,无法进行编译只会被原样拷贝

期望行为
可以自定义,es6模块,走taro编译
例子:

include:[
  "node_modules/xxxx"
]

系统信息

  • 操作系统: mac os
  • Taro 版本: v1.0.7
  • Node.js 版本: v8.11.3
  • 报错平台: weapp

补充信息
图1:自定义包位置
image

图2:package.json 用file: 引用依赖
image

图3:编译后 dist/npm 文件夹内,文件被拷贝,但是未编译
image

@luckyadam
Copy link
Member

node_modules 里文件默认不编译,把所有源码放到 src 目录下就能编译

@1021683053
Copy link
Contributor Author

@luckyadam 不是这个意思,我的意思是,npm install 的东西是 es6 ,这个时候我其实是需要编译的,有没有办法支持,放在src目录下就必须要用相对路径,但是这个项目比较大,相对路径引用太困难,
例子:对request二次封装后,一个文件放在 src/utils/request 目录下,request使用场景很多,每次都是需要 ../../../utils/request.js 或者 ../../../../utils/request.js 这事是一个例子,还有很多文件都会出现该问题,希望支持 node_modules 编译 或者支持 别名

@luckyadam
Copy link
Member

我懂你的意思,目前还不能支持到 node_modules 编译,只能通过放到 src 目录下解决,这个先记一下吧,需要看看如何来调整

@cheese-git
Copy link
Contributor

能不能这样:

对于 node_modules 中的模块,如果 package.json 中,peerDenpendencies 包含 @tarojs/taro,则进行编译;包含 @tarojs/components 则说明这是一个基于 taro 的 UI 库。

或者在 package.json 中添加新的字段 taro, 然后 taro: true, taro: "ui", taro: "lib" 这样。

便于开发和使用基于 taro 的第三方库。

@luckyadam
Copy link
Member

luckyadam commented Dec 9, 2018

@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了

  • 小程序端,在 weapp.compile 下通过 include 字段来设置需要编译的包名
  • H5 端,在 h5 下通过 esnextModules 字段来设置需要编译的包名

两个配置都是数组格式

@1021683053
Copy link
Contributor Author

OK 三克油

@cheese-git
Copy link
Contributor

Thx

@cheese-git
Copy link
Contributor

编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...

还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大

@luckyadam
Copy link
Member

编译是编译了,但是没有处理对 Taro 的引用。。。还是没有办法在自己的包里使用 Taro...

还有 ts 文件虽然也会被编译,但是后缀名没改,小程序不认识 😂 不过这个问题不大

Taro 的引用是指?

node_modules 里还是不要有 ts 源文件吧

@cheese-git
Copy link
Contributor

cheese-git commented Dec 10, 2018

Taro 的引用是指?

node_modules 里还是不要有 ts 源文件吧

嗯嗯,就是比较懒,平时都直接用 ts-node 执行,不想编译成 js 😂

就是我自己的包里引用了 Taro:

import Taro from '@tarojs/taro'

编译出来的文件是这样:

var _taro = require("@tarojs/taro")

然后就会报找不到模块 @tarojs/taro 的错。

按照我的理解,编译后的文件应该类似于这样才能正常执行:

var _taro = require('../../@tarojs/taro-weapp/index.js')

@fengwuxp
Copy link

fengwuxp commented Dec 13, 2018

遇到同样的问题,是否能考虑支持webpack中loader exclude和include的写法,另外在h5.webpackChain中尝试引入新的loader `打包的时候会提示无法找到对应的loder,用的是webpack4。

   `chain.module.rule('compile')
    .test(/\.ts[x]?$/)
    .exclude
    .add((path) => {

      //是否为node_modules中的模块
      var isNodeModules = path.indexOf("node_modules") >= 0;

      var isWxpComponents = ["_starter", "oak_", "common_"].some((item) => {
        return path.indexOf(item) >= 0;
      });
      console.log("isWxpComponents", isWxpComponents);
      if (isWxpComponents || path.endsWith("_starter")) {
        return false;
      }
      return isNodeModules;
    }).end()
    .use("typescript")
    .loader("awesome-typescript-loader")
    .options({
      presets: [
        [
          'env',
          {modules: false}
        ]
      ]
    })`

@HengCC
Copy link

HengCC commented Jul 15, 2019

@cheese-git @1021683053 目前最新的 beta 版本已经支持编译 node_modules 中的文件了

从哪个版本开始支持的呢?

另外文档是否更新下? 谢谢

@towry
Copy link

towry commented Sep 20, 2019

我尝试了的确 有效

我用的 taro 版本是:1.3.9

我的配置是:

weapp: {
    compile: {
      include: [ 'qxjs/' ]
    },
}

@LJJCherry
Copy link

如果是node_modules里面的包,直接使用包名,亲测有用

@tourze
Copy link
Contributor

tourze commented Apr 18, 2020

遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用

@LJJCherry
Copy link

LJJCherry commented Apr 18, 2020

遇到同样问题,在1.3.x还是很难完美解决。我现在的做法是直接本地sync到src,然后用别名来引用

weapp: {
    compile: {
      include: [
        'miniapp-reporter',
      ],
    }
  } 

配置一下包名就可以

@Chen-jj
Copy link
Contributor

Chen-jj commented Jul 2, 2020

Taro 2 或 3 使用 webpack 构建,应该没有问题了。

@Chen-jj Chen-jj closed this as completed Jul 2, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

9 participants